使用Microchip的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)];
这个表达式也需要是一个编译时常量,让我认为这实际上并不是枚举声明中的错误。
答案 0 :(得分:3)
这看起来像是Microchip XC8编译器的限制/错误。
在枚举常量定义中,当sizeof (X)
是聚合或联合类型或对象时,编译器不会将X
视为常量表达式(即使实际上它位于c90或c99中)集合类型或联合类型。