作者:彩色蜗牛 | 来源:互联网 | 2022-12-02 18:19
枚举1 上的C11规范声明枚举器常量必须具有int类型(1440-1441):
1440定义枚举常量值的表达式应为整数常量表达式,其值可表示为int.
1441枚举器列表中的标识符声明为具有int类型的常量,并且可以出现在允许的位置.107)
但是,它表明枚举的支持类型可以是signed int,unsigned int或char,只要它符合枚举(1447-1448)中的常量范围:
1447每个枚举类型应与char,有符号整数类型或无符号整数类型兼容.
1448类型的选择是实现定义的,108)但应能够表示枚举的所有成员的值.
这似乎表明只有编译器才能知道枚举类型的宽度,这一点很好,直到您将枚举类型数组视为动态链接库的一部分.
说你有一个功能:
enum my_enum return_fifth(enum my_enum[] lst) {
return lst[5];
}
这在链接到静态时会很好,因为编译器知道a的大小my_enum
,但链接到它的任何其他C代码可能不知道.
那么,一个C库如何动态链接到另一个C库,并知道编译器如何决定实现枚举?(或者大多数现代编译器只是坚持int
/ uint
并且char
完全放弃使用s?
1好的,我知道这个网站不是C11的标准,因为这个标准更接近:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf