限制C中main的参数个数

时间:2010-09-16 07:00:40

标签: c language-lawyer

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

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

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

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

4 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:13)

不,ISO C99标准没有限制。如果您使用的是“祝福”main表单(其中有两个):

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

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

当然,你甚至可以更多,因为标准特别允许非祝福main表格(例如,一个以long作为计数)。

标准要求如何存储参数以及argv[argc]之类的必须为NULL,但不直接限制数量。

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

大多数工具会将大量参数放入响应文件(比如args.txt),然后传递一个参数,如:

my_prog @args.txt

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

答案 2 :(得分:1)

我不这么认为。虽然可能没有理论上的限制,但计算机可能无法处理150万个参数。你需要知道这个有什么特别的原因吗?我不建议将命令行参数用于除选项,文件参数等之外的其他内容......

答案 3 :(得分:0)

C本身没有明确的限制。这是未在语言中定义的行为的示例,而是实现。请记住,语言本身与其实现,后续库,IDE等不同。