我使用Microchips XC8 C编译器1.12进行开发。
我有以下代码片段,但编译器对此不满意。
struct _foo {
int a;
};
enum BAR {
CONST1 = sizeof(struct _foo)
};
我得到的错误是:main.c:6: error: integer expression required
为什么它会产生那个错误?C中任何结构的大小都不是常量吗?如果我使用sizeof(int),一切都很好。
注意:XC8编译器v1.12遵循C90标准,而不是现代C99标准。
PS这确实编译:
char abc[sizeof(struct _foo)];
这个表达式还需要是一个编译时常数,这让我认为这实际上不是枚举声明中出现的问题。
这看起来像是Microchip XC8编译器的限制/错误。
在枚举常量定义中,当X
是聚合或联合类型,或者是聚合类型或联合类型的对象时,编译器不将sizeof (X)
视为常量表达式(即使它实际上在c90或c99中)。