0

次のコードがあります。

typedef struct Y {int X;} X;
enum E {X};

これはエラーを生成します:

エラー: 'X' が別の種類のシンボルとして再宣言されました

私が知っているように、C では、構造体、共用体、および列挙型のタグと、それらのメンバーの名前空間が暗黙的に定義されています。では、なぜE::Xtypedef 構造 tag と衝突するのかわかりませんXか?

Cの名前空間とは正確には何ですか?

4

2 に答える 2

5

enumC には、メンバー用の個別の名前空間がありません。を記述enum {X}すると、グローバル定数が作成されます ( 'd タグXなどの他のグローバル名と衝突する可能性があります)。typedef

于 2012-11-24T21:50:41.940 に答える
0

Xグローバル名前空間で宣言されているため、これenum Eには が含まれ、さらに の再宣言が含まれますX。これは、それらが同じレベルにないために発生します。1 つの「名前空間」に別の名前空間が含まれています。

于 2012-11-24T21:43:07.997 に答える