限制C中main的参数个数

Rav*_*hak 10 c language-lawyer

我们main()在C中传递的参数数量是否有限制?众所周知,它被定义为int main(int argc, char *argv[]).

当我调用程序时,我可以传递这样的参数:

$ prog.exe arg1 arg2 arg3.....argn
Run Code Online (Sandbox Code Playgroud)

我们可以通过main()这种方式提供的参数数量是否有上限?

Pot*_*ter 15

根据POSIX规范exec,ARG_MAX定义了一个宏<limits.h>,定义了参数+环境变量的最大字节数.

但由于C没有对此进行任何定义,否则,没有固有的跨平台限制.如果没有定义该宏,则必须查阅操作系统手册.


pax*_*blo 13

不,ISO C99标准没有限制.如果您使用的是"祝福" main形式(其中有两种):

int main (int argc, char *argv[]);
Run Code Online (Sandbox Code Playgroud)

然后,您将被限制为有符号整数的最大大小(取决于实现,但保证至少为2 15 -1或32,767).

当然,你甚至可以拥有更多,因为标准特别允许非祝福main形式(例如,一个long作为计数的一个).

该标准规定了如何存储参数以及argv[argc]必须为NULL的事情,但它不直接限制数量.

当然,实践中会有一个限制,但这完全取决于实施和环境.但是,如果你不得不问,那么你可能做错了.

大多数工具将使一个真正的大量的参数到一个响应文件(比如说args.txt),然后传似一个参数:

my_prog @args.txt
Run Code Online (Sandbox Code Playgroud)

它绕过参数数量和大小的任意限制.