变异函数 - 是否存在参数限制?

时间:2015-12-11 22:55:15

标签: c

我提出了一个有趣的问题,我已经做了一些研究,但找不到确凿的答案。我也怀疑答案,但我认为SO人群实际上可能知道

传递给可变参数函数的参数数量实际上有限制吗?

我能找到的所有文档在这一点上都是完全无声的。各种C标准中支持的参数有最小数量,但没有列出最大值。我已经用60,000个参数测试了代码而没有任何问题。

我的假设

我怀疑这实际上取决于架构,并且会受到最大堆栈大小的限制。

修改

我可能已经让人们朝错误的方向走去。我的重点不在于最小,而在于它们是否了解任何实际的最大,无论是基于标准,编译器实现还是体系结构。

1 个答案:

答案 0 :(得分:5)

C标准没有施加此类限制。

C标准确实需要任何符合要求的实现来支持某个程序,该程序在函数调用中传递至少127个参数(参见N1570第5.2.4.1节),但这不是一个上层可变函数的下界;调用不必是一个可变函数,并且实现可以自由地支持超过127个参数。定义<stdarg.h>的部分7.16未提及任何限制。

实际上,任何限制都可能由可用资源强加,无论是在编译时(编译调用时)还是在运行时(执行时)。

仅仅由于常识和市场力量,编译器可能会支持任意长的参数列表而不是强加一些固定限制。一旦您需要支持127个参数,动态分配任何所需的数据结构可能比使用固定大小的结构更容易。 (在我看来,5.2.4.1中的翻译限制点是为了鼓励编制者根本不施加固定限制。)

另一方面,符合标准的编译器可以强加一个不合理的小限制,而非常小的嵌入式系统的编译器甚至可能有正当理由这样做。