sizeof(struct foo)不是常数?

时间:2013-08-28 20:38:20

标签: c struct enums sizeof microchip

使用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)];

这个表达式也需要是一个编译时常量,让我认为这实际上并不是枚举声明中的错误。

1 个答案:

答案 0 :(得分:3)

这看起来像是Microchip XC8编译器的限制/错误。

在枚举常量定义中,当sizeof (X)是聚合或联合类型或对象时,编译器不会将X视为常量表达式(即使实际上它位于c90或c99中)集合类型或联合类型。