这是一个人为的例子,但表达了核心问题。我有一个联合和一个结构,它与现有代码库中的嵌套结构相同:
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 ,但这有什么后果吗?