4

たとえば、次の有効な C コードはありますか?

typedef struct {
    /* ... */
} foo;

typedef struct {
    foo foo; /* Is it ok that 'foo' == 'foo'? */
} bar;
4

1 に答える 1

7

はい、これは有効な C です (ただし、読み取り不能であり、避ける必要があります)。

型識別子と構造体メンバー識別子は、異なる名前空間に存在します。

C99、6.2.3p1 識別子の名前空間を参照してください。

[...] 次のように、識別子のさまざまなカテゴリに個別の名前空間があります。

— 構造体、共用体、および列挙のタグ [...]

— 構造体または組合のメンバー 各構造体または共用体には、そのメンバー用に個別の名前空間があります [...]

— 通常の識別子と呼ばれる他のすべての識別子 [...]

于 2013-03-13T22:15:47.407 に答える