argv[argc]
は常にのように見えるNULL
ので、引数リストは なしでトラバースできると思いますargc
。単一のwhile
ループでこれを行います。
NULL
の最後に必ず がある場合argv
、なぜ が必要なのargc
ですか?
はい、argv[argc]==NULL
保証されます。C11 5.1.2.2.1 プログラムの起動を参照(強調)
それらが宣言されている場合、メイン関数のパラメーターは次の制約に従う必要があります。
argc の値は非負でなければなりません。 argv[argc] は null ポインターでなければなりません。
したがって、提供するargc
ことは不可欠ではありませんが、それでも有用です。特に、正しい数の引数が渡されたことをすばやく確認できます。
編集: C++ を含めるように質問が修正されました。n3337 ドラフト3.6.1 メイン関数は言う
2 ...argc は、プログラムが実行される環境からプログラムに渡される引数の数です。.... argc の値は非負でなければなりません。argv[argc] の値は 0です。
これは歴史的な理由と、古いコードとの互換性のためです。もともと、argv 配列の最後の要素として null ポインターが存在するという保証はありませんでした。しかし、argc は常に存在していました。