c-sizeof(struct-foo)不是常量



我使用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中)。

最新更新