Domanda

Come si passano le opzioni a un eseguibile? C'è un modo più semplice che rendere le opzioni argomenti booleani?

EDIT: le ultime due risposte hanno suggerito di usare argomenti. So di poter codificare una soluzione praticabile come quella, ma preferirei che fossero opzioni.

EDIT2: per richieste di chiarimenti, userò questo semplice esempio: È abbastanza facile gestire gli argomenti perché vengono automaticamente analizzati in un array.

./printfile file.txt 1000

Se voglio sapere quale sia il nome del file che l'utente desidera stampare, accedo ad esso tramite argv [1].

Ora su come questa situazione:

./printfile file.txt 1000 --nolinebreaks

L'utente desidera stampare il file senza interruzioni di riga. Ciò non è necessario per l'esecuzione del programma (come il nome del file e il numero di righe da stampare), ma l'utente ha la possibilità di utilizzare se lo desidera. Ora potrei farlo usando:

./printfile file.txt 1000 true

Il prompt di utilizzo informerebbe l'utente che il terzo argomento viene utilizzato per determinare se stampare il file con interruzioni di riga o meno. Tuttavia, questo sembra piuttosto goffo.

È stato utile?

Soluzione

Sembra che ci sia qualche differenza fondamentale tra "opzioni" che iniziano con " - " e "argomenti" quello no. L'unica differenza è nel modo in cui li analizzi.

Potrebbe valere la pena dedicare del tempo a esaminare il parser di opzioni getopt () / getopt_long () di GNU. Supporta il passaggio di argomenti con opzioni come --number-of-line-break 47 .

Altri suggerimenti

Gli argomenti della riga di comando sono la strada da percorrere. Potresti prendere in considerazione l'utilizzo di Boost.ProgramOptions per semplificare questa attività.

Uso due metodi per passare informazioni:

1 / L'uso degli argomenti della riga di comando, che sono semplificati da gestire con librerie specifiche come getargs.

2 / Come variabili d'ambiente, usando getenv.

Pax ha l'idea giusta qui.

Se hai bisogno di una comunicazione bidirezionale più approfondita, apri il processo con pipe e invia materiale a stdin / ascolta su stdout.

Puoi anche usare la funzione PostMessage () di Windows. Questo è molto utile se l'eseguibile a cui si desidera inviare le opzioni è già in esecuzione. Posso pubblicare alcuni esempi di codice se sei interessato a questa tecnica.

La domanda non è straordinariamente chiara sul contesto e su cosa stai cercando di fare: intendi eseguire un eseguibile all'interno di un programma C ++? Esistono diverse funzioni di libreria C standard con nomi come execl (), execv (), execve (), ... che accettano le opzioni come stringhe o puntatori a un array di stringhe. C'è anche system () che accetta una stringa contenente qualunque cosa tu stia digitando al prompt di bash, opzioni e tutto.

Mi piace la libreria popt. È C, ma funziona bene anche da C ++.

Tuttavia, non sembra essere multipiattaforma. L'ho scoperto quando ho dovuto hackerare la mia versione compatibile con API per una porta Windows di alcuni software Linux.

È possibile inserire le opzioni in un file .ini e utilizzare Le API di GetPrivateProfileXXX per creare una classe in grado di leggere il tipo di opzioni del programma che stai cercando da .ini.

Puoi anche creare una shell interattiva per la tua app per modificare determinate impostazioni in tempo reale.

EDIT: Dalle tue modifiche, non puoi semplicemente analizzare ogni opzione alla ricerca di parole chiave speciali associate a quell'opzione che sono " opzionale " ;?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top