11

main()Cで渡す引数の数に制限はありますか?ご存知のように、それはとして定義されint main(int argc, char *argv[])ます。

プログラムを呼び出すと、次のような引数を渡すことができます。

$ prog.exe arg1 arg2 arg3.....argn

このように提供できる引数の数に上限はありmain()ますか?

4

4 に答える 4

15

のPOSIX仕様によると、引数+環境変数の最大バイト数を定義execするマクロがARG_MAX定義されています。<limits.h>

しかし、Cはそれについて何も定義していないので、いいえ、固有のクロスプラットフォームの制限はありません。そのマクロが定義されていない場合は、OSのマニュアルを参照する必要があります。

于 2010-09-16T07:13:01.067 に答える
14

いいえ、ISOC99規格による制限はありません。「祝福された」mainフォーム(2つあります)を使用している場合:

int main (int argc, char *argv[]);

その場合、符号付き整数の最大サイズに制限されます(実装に依存しますが、少なくとも2 15 -1または32,767であることが保証されます)。

もちろん、標準では祝福されていないフォーム(たとえば、カウントとしてaをとるフォーム)が特に許可されているため、それ以上のものを使用することもできます。mainlong

この規格では、引数の格納方法やargv[argc]NULLである必要があることなどが義務付けられていますが、数量を直接制限するものではありません。

もちろん、実際には制限がありますが、これは実装と環境に完全に依存します。ただし、質問する必要がある場合は、おそらく何か間違ったことをしていることになります。

ほとんどのツールは、本当に多数の引数を応答ファイルに配置し(たとえばargs.txt)、次のような単一の引数を渡します。

my_prog @args.txt

これは、引数の量とサイズの任意の制限を回避します。

于 2010-09-16T07:28:20.530 に答える
1

私はそうは思いません。理論上の制限はないかもしれませんが、コンピュータはおそらく150万の引数を処理できません。これを知る必要がある特別な理由はありますか?オプション、ファイルパラメータなど以外の目的でコマンドライン引数を使用することはお勧めしません...

于 2010-09-16T07:07:10.407 に答える
0

C自体に明示的な制限はありません。これは、言語ではなく実装で定義された動作の例です。言語自体は、その実装、後続のライブラリ、IDEなどとは異なることに注意してください。

于 2010-09-16T08:19:40.103 に答える