3

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

而且这个表达式还需要是一个编译时常量,这让我认为这实际上不是 enum 声明中出了什么问题。

4

1 回答 1

3

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

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

于 2013-08-28T21:07:31.007 回答