gcc和VC++预处理器可以处理的#defines数量是否有限制?

Sha*_*son 6 gcc visual-c++ c-preprocessor

在讨论具有大量常量和位模式的项目的设计可能性时,问题出现了标准编译器可以处理多少#defines?我认为它是一个非常大的数字,但我们很想知道是否有一个实际的上限.

Ste*_*sop 8

对于"标准编译器":

5.2.4.1:"翻译限制"

该实现应能够转换和执行至少一个包含以下每个限制的至少一个实例的程序

...

在一个预处理转换单元中同时定义的4095个宏标识符

请注意表达要求的略微奇怪的方式.实现可以通过一个单独的"黄金程序" 满足它,他们认识并编译为特殊情况,尽管这类似于操纵基准.在实践中,您可以阅读标准,如果您的实现强加了可用内存以外的限制,那么该限制应该至少为4095.超过4095,您在某种程度上依赖于特定于实现的行为.

一些编译器(Microsoft)施加了一些低于标准规定的实现限制.我认为这些列在MSDN的某个地方,但可能只适用于C++.就C而言,由于我引用C99,它可能与MSVC无关.

特别是对于GCC和MSVC,测试给定的实现是否施加任意限制应该不会太难,可能比找到它记录更容易:-)自动生成只包含很长列表的文件#define,看看预处理器是什么他们的成就.