これは不自然な例ですが、核となる問題を表しています。既存のコード ベースから同じネストされた構造を持つユニオンと構造があります。
typedef union _MyUnion
{
unsigned int A;
struct _MyNestedStruct
{
int field
} MyNestedStruct;
} MyUnion;
と
typedef struct _MyStruct
{
struct _MyNestedStruct
{
int field
} MyNestedStruct;
} MyStruct;
これを Green Hills Compiler (GHC) でコンパイルすると、問題はありません。GCC でコンパイルすると、「エラー: 'struct _MyStruct' の再定義」というエラーが発生します。
まず、名前付き構造体を入れ子構造として正常にコンパイルできたのはなぜですか? GHC がいくつかの C++ ルールでコンパイルされているか、ネストされた構造で名前付き構造をサポートしていると思われます。
次に、コードを大幅に変更せずにコンパイルを成功させるにはどうすればよいでしょうか? ネストされた構造から _MyNestedStruct を削除するだけでよいことはわかっていますが、何か影響はありますか?