2016-07-14 25 views
0

Weiß jemand, wie man gegenseitig ausschließende Optionen mit argp in C spezifizieren? Gibt es einen Trick, den man benutzen könnte?sich gegenseitig ausschließende Optionen mit Argp in C

EDIT

Was sich gegenseitig ausschließende Optionen?

Angenommen, Sie haben eine Befehlszeile utility. Sie geben utility --help und die Ausgabe sieht wie folgt aus

utility [-a|-b] 

Optionen -a und -b sich gegenseitig aus, weil man sie nicht zusammen angeben können, das heißt die Angabe -a die Verwendung von -b ausschließt. Dasselbe gilt für -b. Wenn es verwendet wird, kann -a nicht angegeben werden. Mit anderen Worten ist nur folgendes möglich:

utility -a oder utility -b.

Von der argp Dokumentation scheint es nicht, dass es möglich ist, diese Art von Option anzugeben. Die Frage ist also, welche Tricks die Leute verwenden, um diese Art von Option anzugeben? Ich bin mir sicher, dass das Bedürfnis mehr als einmal in jemandes Erfahrung aufkam.

+0

Was ist 'argp'? –

+0

Meinst du 'argc' und' argv'? – stackptr

+0

Meinst du 'argp', was' glibc'-spezifisch ist? Ein Beispielprogramm wie [this] (http://crasseux.com/books/ctutorial/argp-example.html)? – user3078414

Antwort

0

Ich weiß nicht, ob Argp die Funktion hat, die Sie wollen, aber sind Sie sicher, dass Sie es wollen? Sie müssen die Beziehung beschreiben und eine Nachricht bereitstellen, oder?

Traditionell getopt nur analysierte Argumente. Sie konnten nicht obligatorisch, optional oder mit welchem ​​was angeben. Die Schleife getopt ging über argv und behandelte nacheinander jede Option (und jedes Argument). Sobald dies geschehen ist, untersuchen Sie die Ergebnisse und behandeln Konflikte.

switch(ch) { 
    case 'a': foo = true; break; 
    case 'b': bar = true; break; 
} 
if(foo && bar) { 
    errx(EXIT_FAILURE, "foo and bar cannot be used together"); 
} 

Das sieht einfach und verständlich aus. Ich würde nicht versuchen wollen, es in der Option-String-Grammatik auszudrücken.

+0

Ich könnte mit dir Vorschlag gehen. – flashburn

0

Ein Programm mit zwei sich gegenseitig ausschließenden Optionen, und -b, hält den Benutzer normalerweise nicht davon ab, beide in der Befehlszeile anzugeben.

Stattdessen würde das Programm parsen und dann eine interne Variable setzen, vielleicht opt_ab = 1. Wenn die Variable -b später analysiert wird, wird die Variable opt_ab = 0 festgelegt. Es wäre die letzte Option in der Befehlszeile, die wirksam wurde.

So wird es in den allermeisten Befehlszeilenwerkzeugen gemacht. Sie haben zum Beispiel:

$ ls -1 -C 

gegen

$ ls -C -1