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 は、最新の C99 標準ではなく、C90 標準に準拠しています。

PSこれはコンパイルします:

char abc[sizeof(struct _foo)];

また、この式はコンパイル時の定数である必要があるため、enum 宣言で実際に問題が発生しているとは思えません。

4

1 に答える 1

3

これは、Microchip XC8 コンパイラの制限/バグのようです。

列挙型定数の定義で、が集約型または共用体型である場合、または集約型または共用体型のオブジェクトである場合、コンパイラはsizeof (X)(実際には c90 または c99 であっても) 定数式と見なしません。X

于 2013-08-28T21:07:31.007 に答える