私はgetopt
を使用してコマンドラインからパラメータを解析しています。オプションのパラメータの順序を認識させる問題があります。getoptは何らかの順序でパラメータを取得していません
私はこれらのケースを達成したい:
$ ./program -i file.html -o output.html #ex 1
$ ./program -i -o file.html output.html #ex 2
$ ./program -o output.html -i file.html #ex 3
私のコードは、私もしばらく外
for(int i = optind; i < argc; i++) {
printf("non optional argument %s\n", argv[i]);
return 0;
}
を書いてきた、これをよりよくデバッグするこの
while((c = getopt(argc, argv, "hi:o:")) != -1) {
switch(c) {
case 'h':
//prints the help file
break;
case 'i':
ivalue = optarg;
break;
case 'f':
fvalue = optarg;
break;
case '?':
//prints an error
break;
default:
abort();
}
}
のように見えます
のように、例1と例3は正しく動作していますが、例2では、パラメータが真っ直ぐになっていません。最初は私はそれが単純にこの機能では不可能だと思ったが、次にthisの例で私はそれを見た。
さらに、パラメータなしでプログラムを呼び出すと、abort()
が表示されません。
私はubuntu 15.10とgcc 5.2.1をapt-getでインストールしています。
例#2は、標準のPOSIXコマンドライン形式( 'getopt'によって実装されています)に従いません。オプション引数はオプションの直後になければなりません。 – interjay
リンク先の例があなたを混乱させました。 '-a'オプションが別の位置にスワップされていますが、そのオプションは引数を受け付けないことに注意してください。 '-o'オプションは引数を受け入れ、' -o'とその引数の間に '-a'を挿入しません。 @interjayが観察するように、オプションが引数を受け入れる場合、その引数はそのオプションに直接従わなければなりません。 –