我有一个关于枚举常量的 C (定义在 ANSI/ISO 9899:X 标准系列中)的翻译限制的非常具体的问题。
我有几千个可单独识别的数据源,我想列举一下。此外,我想尊重 C 标准的最小翻译限制,因为实际限制是实现定义的,超过这些限制是未定义的行为(请参阅是否未定义的行为超出了翻译限制,是否有检查工具可以找到它?)。
我知道同一枚举中的枚举常量数量(C90:127)、同一块中指定的标识符数量(C90:127)和翻译单元中的外部标识符(C90:511)存在翻译限制。
我认为枚举常量没有链接(请纠正我),当然我可以将它们置于块范围之外......因此将任何翻译限制约束置于以下模式(除了目标平台的整数类型的限制,当然还有一个枚举中的常量数量) - 如果是这样,为什么?
MyEnumeration.h
---------------
enum e1
{
VAL11 = 0,
VAL12,
/* ... */
VAL_1N,
END1 = VAL_1N
};
enum e2
{
VAL21 = END1,
VAL22,
/* ... */
VAL_2N,
END2 = VAL_2N
};
/* ... */
enum eN
{
VALN1 = ENDN_1,
VALN2,
/* ... */
VAL_NN,
ENDN = VAL_NN
};
#define NUM_ENUM ENDN
注意:切换到 #define 将无济于事,因为定义的宏标识符 (C90: 1024) 也存在翻译限制。我将被迫以复杂的方式#undef,可能使用复杂的#include 模式。