我正在用微芯片XC8 C編譯器開發1.12。sizeof(struct foo)不是常量?
我有下面的代碼片段,但編譯器不滿意它。
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)];
而且這種表達也需要一個編譯時間常數導致我認爲這其實不是什麼錯在枚舉聲明。
這看起來像編譯器中的限制。 – ouah
@Gilles:不,變長數組不能是結構的成員。 (有靈活的數組成員,但它們不會影響'sizeof'報告的大小。) –
'const int sizeof_foo = sizeof(struct _foo);枚舉BAR {CONST1 = sizeof_foo};'工作?我不希望它有任何區別,但它值得一試。 –