一个有趣的问题出现了,我已经做了一些研究,但无法找到一个确定的答案.我也怀疑答案,但我认为SO人群可能真的知道.
传递给可变参数函数的参数数量实际上是否有限制?
我能找到的所有文档在这一点上都是完全无声的.各种C标准中支持的参数有最小数量,但没有列出最大值.我已经用60,000个参数测试了代码而没有任何问题.
我的假设
我怀疑这实际上取决于体系结构,并且实际上会受到最大堆栈大小的限制.
编辑
我可能已经把人们带到了错误的方向.我的重点不在于最小值,而在于它们是否了解任何实际最大值,无论是基于标准,编译器实现还是体系结构.
C标准没有施加此类限制.
C标准确实需要任何一致的实现来支持一些在函数调用中传递至少127个参数的程序(参见N1570第5.2.4.1节),但这既不是可变函数的上限也不是下限.调用不必是一个可变函数,并且实现可以自由地支持超过127个参数.定义的部分
7.16没有提到任何限制.
实际上,任何限制都可能由可用资源强加,无论是在编译时(编译调用时)还是在运行时(执行时).
而且仅仅由于常识和市场力量,编译器可能会支持任意长的参数列表而不是强加一些固定限制.一旦您需要支持127个参数,动态分配任何所需的数据结构可能比使用固定大小的结构更容易.(在我看来,5.2.4.1中的翻译限制点是为了鼓励编制者根本不施加固定限制.)
另一方面,符合标准的编译器可能会施加不合理的小限制,而针对非常小的嵌入式系统的编译器甚至可能有正当理由这样做.