我们在 C 中传递的参数数量是否有限制main()
?众所周知,它被定义为int main(int argc, char *argv[])
。
当我调用程序时,我可以像这样传递参数:
$ prog.exe arg1 arg2 arg3.....argn
我们可以通过这种方式提供的参数数量是否有上限main()
?
我们在 C 中传递的参数数量是否有限制main()
?众所周知,它被定义为int main(int argc, char *argv[])
。
当我调用程序时,我可以像这样传递参数:
$ prog.exe arg1 arg2 arg3.....argn
我们可以通过这种方式提供的参数数量是否有上限main()
?
根据 POSIX 规范exec
,定义了一个宏ARG_MAX
,<limits.h>
其中定义了参数 + 环境变量的最大字节数。
但是由于 C 没有对此进行任何定义,因此不存在固有的跨平台限制。如果没有定义该宏,您必须查阅您的操作系统手册。
不,ISO C99 标准没有限制。如果您使用的是“祝福”main
形式(其中有两种):
int main (int argc, char *argv[]);
那么您将被限制为有符号整数的最大大小(取决于实现,但保证至少为 2 15 -1 或 32,767)。
当然,您甚至可以拥有更多,因为该标准特别允许非祝福main
形式(例如,以 along
作为计数的形式)。
该标准规定了如何存储参数以及argv[argc]
必须为 NULL 之类的东西,但它并不直接限制数量。
当然,在实践中会有一个限制,但这完全取决于实施和环境。但是,如果您不得不问,那么您可能做错了什么。
大多数工具会将大量参数放入响应文件(例如args.txt
),然后传递单个参数,例如:
my_prog @args.txt
它绕过了参数数量和大小的任意限制。
我不会这么认为。虽然可能没有理论上的限制,但计算机可能无法处理 150 万个参数。你有什么特别的理由需要知道这一点吗?我不建议对选项、文件参数等以外的东西使用命令行参数...
There is no limit explicit in C itself. This is an example of a behavior not defined in the language but rather the implementation. Remember that the language itself is different than it's implementation, subsequent libraries, IDE's, etc.