【发布时间】:2013-09-01 02:35:48
【问题描述】:
我正在使用 Microchips XC8 C 编译器 1.12 进行开发。
我有以下代码 sn-p 但编译器对此不满意。
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)];
而且这个表达式还需要是一个编译时常量,让我认为这实际上不是枚举声明中的问题。
【问题讨论】:
-
这看起来像是编译器的限制。
-
@Gilles:不,可变长度数组不能是结构的成员。 (有灵活的数组成员,但它们对
sizeof报告的大小没有贡献。) -
const int sizeof_foo = sizeof (struct _foo); enum BAR { CONST1 = sizeof_foo };有效吗?我不认为它会有所作为,但值得一试。 -
保留以下划线开头的标识符;你不应该在你自己的代码中使用它们。
struct foo是个好名字。 -
@KeithThompson 因为我刚刚在我的机器上安装了编译器来解决这个问题,我可以告诉你,不,没有区别
标签: c struct enums sizeof microchip