0
typedef union { unsigned x; } T;

T a;
a.x = 3;

int main() { return 0; }

このコードを でコンパイルしようとするとgcc t.c

error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token

使用して

gcc --version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

a.x = 3;内部に移動mainすると、期待どおりに動作します。

からのパッセージを見つけたい

ISO/IEC 9899:TC3

グローバル名前空間の共用体に値を割り当てることは禁止されていると説明されています。


EDIT:構造体でも同じことが起こります。

4

2 に答える 2

2

グローバル名前空間のユニオンに値を割り当てることは禁止されていると説明されているISO/IEC 9899:TC3からの一節を見つけたいと思います。

これは、C99(翻訳単位の構文)の6.9p1に記述されています。関数の外部にステートメントを含めることはできません。

于 2013-02-07T20:46:02.497 に答える
0

できないことは無数にあるため、通常、言語仕様では明示的ではなく暗黙的です。実際、「割り当て」が初期化を参照できないと主張したい場合を除き、グローバル名前空間の共用体に値を割り当てることができますグローバル共用体のメンバーを初期化するための C99 構文は次のようになります。

typedef union { unsigned x; } T;

T a = {.x = 3};

もちろん、構造についても同じ答えです。

于 2013-02-07T22:19:58.887 に答える