Come si accettano gli argomenti nel file main.cpp e si fa riferimento a un altro file?

1

Ho una conoscenza di base della programmazione e attualmente sto imparando C ++. Sono nelle fasi iniziali della costruzione del mio programma CLI per Ubuntu. Tuttavia, ho colpito alcuni ostacoli e mi chiedevo se potevo ottenere qualche chiarimento. Il programma su cui sto lavorando si chiama "sat" e sarà disponibile solo tramite la riga di comando. Ho il main.cpp.

Tuttavia, la mia vera domanda è più di una "migliore pratica" per la programmazione / organizzazione. Quando viene invocato il mio programma "sat", voglio che prenda ulteriori argomenti.

Ecco un esempio:

> sat task subtask

Non sono sicuro che l'attività dovrebbe essere nel proprio file task.cpp per un'organizzazione migliore o se dovrebbe essere una funzione nel main.cpp? Se l'attività deve essere nel proprio file, come si accettano gli argomenti nel file main.cpp e si fa riferimento all'altro file?

Qualche idea su quale metodo è preferito e materiale di riferimento per fare il backup del ragionamento?

    
posta jason.dot.h 11.07.2012 - 05:08
fonte

2 risposte

2

I tuoi file di codice .cpp vengono tutti compilati negli stessi oggetti binari, quindi separare i file è solo una comodità per lo sviluppo, rendendo il codice modulare. Dopo aver analizzato i parametri della riga di comando, puoi decidere quali chiamate eseguire nella tua applicazione.

Si itera attraverso gli argomenti dell'applicazione tramite l'array argv [] passato al tuo punto di ingresso principale () .

#include <iostream>

int main(int main, char* argv[])
{
        // Check the number of parameters
        if (argc < 2) {
                // Tell the user how to run the program
                std::cerr << "Usage: " << argv[0] << " NAME" << std::endl;
                /* "Usage messages" are a conventional way of telling the user
                 * how to run a program if they enter the command incorrectly.
                 */
                return 1;
        }
        // Print the user's name:
        std::cout << argv[0] << "says hello, " << argv[1] << "!" << std::endl;
        return 0;
}

Per quanto riguarda le best practice, è meglio non reinventare la ruota utilizzando una parser da riga di comando libreria come risposta qui .

    
risposta data 11.07.2012 - 12:54
fonte
1

Ci sono alcune preferenze personali e alcuni leggeri vantaggi in termini di design. Accettare argomenti e passarli ad altri moduli / funzioni non è un problema. Ciò che è in discussione è quanto bene sarà rappresentata l'architettura generale se la dividi, contro se la mantieni tutta in un solo file.

La ragione principale per suddividerla dovrebbe essere se ha senso dal punto di vista organizzativo.

Se ho un programma che si occupa di oggetti Desk e Pig , posso dividere tutte le dichiarazioni di classe relative al desk e il codice di definizione in Desk.h e Desk.cpp . Allo stesso modo per Pig . Se le interfacce con questi oggetti sono ben definite, la modifica della modalità di implementazione dell'oggetto Desk non dovrebbe cambiare il modo in cui viene eseguito il programma principale. Ma ora sto entrando nella progettazione orientata agli oggetti.

Quello che sto dicendo è che se c'è una buona ragione dal punto di vista del design per dividere Task su dalla funzione main() , allora dovresti farlo. Dal tuo post non sono così sicuro di quello che stai cercando di ottenere.

Che cosa può aiutare più del mio tentativo di risposta è articolo di Wikipedia sulla progettazione del software .

    
risposta data 11.07.2012 - 06:49
fonte

Leggi altre domande sui tag