C 枚举常数的平移极限
我有一个非常具体的问题,关于枚举常量的C(定义见ANSI/ISO 9899:X标准系列)的转换限制 我想列举大约一千个可单独识别的数据源。我还想尊重C标准的最小转换限制,因为实际限制是由实现定义的,超过这些限制就是未定义的行为(请参阅) 我知道,对于同一个枚举(C90:127)中枚举常量的数量、同一块(C90:127)中指定的标识符的数量以及转换单元(C90:511)中的外部标识符,存在转换限制 我认为枚举常量没有链接(请纠正我),当然我可以将它们放在块范围之外。。。因此,将任何转换限制约束放在以下模式中(除了目标平台的整数类型的限制,当然还有单个枚举中常量的数量),如果是,为什么C 枚举常数的平移极限,c,enums,standards,c89,ansi-c,C,Enums,Standards,C89,Ansi C,我有一个非常具体的问题,关于枚举常量的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)也有翻译限制。我将被迫以复杂的方式取消定义,可能是使用复杂的包含模式。编译器不要求程序员定义511个不同的枚举变量,每个变量有127个不同的值名,每个值名有31个字符。即使名称以绝对最佳的格式存储,编译器仍需要大约1.5兆字节来存储所有这些数据——在一台总内存为64K、有两个360K软盘驱动器的机器上运行的编译器不太可能[如果名称是使用宏扩展生成的,则定义所有这些名称的源文件可能比64K小得多]。请注意,尽管1989年这样的机器可能比较小,但C通常用于更小的机器,标准的作者不想禁止这样的实现 一个好的编译器将允许标识符有一定数量的存储空间,如果程序超过该限制,它将中止编译(在不限制单个程序的内存使用的系统上,编译器应将限制设置得足够高,以确保没有实际的程序会达到该限制,但应设置得足够低,以确保恶意编写的源文件不会使整个系统崩溃。如果编译器设计用于具有许多MB或GB RAM的系统,则标准不应该是一个因素。会有一些限制,但除非你点击它,否则可能无法知道它是什么