4

getopt_longこれまでのところ、コマンド ライン C プログラムのオプションを解析するために使用してきました。

getopt_long非オプションの引数にヒットしたときに解析を停止する方法はありますか? そうでない場合、C でこれを処理する最善の方法は何ですか?

例を挙げると、コマンドをgitと同様の方法で処理し、コマンドの前に一般的な引数を置き、その後にコマンド固有の引数を置きたいと思います。

git [general options] <command> [command options]

例えば:

git --bare commit -a
git -p --bare status -s

-pおよび--bareは一般的なオプションであり、すべてのコマンドで使用できますが、-aはコマンドに固有であり、commitコマンドに-s固有statusです。

Usinggetopt_longは、最初にすべてのオプションを解析しようとし、次にオプション以外の引数を処理するために残します。非オプション (つまり、コマンド) をヒットしたら解析を停止し、残りの引数をコマンド固有のオプション パーサーに渡すのが理想的です。

4

1 に答える 1

6

GNU Getopt マニュアルには次のように書かれています。

POSIX は次の動作を要求します: 最初の非オプションは、オプション処理を停止します。このモードは、環境変数 POSIXLY_CORRECT を設定するか、オプション引数文字列をプラス記号 ('+') で開始することによって選択されます。

于 2011-08-15T15:37:29.100 に答える