이것은 고의적 인 예이지만 핵심적인 문제를 나타냅니다. 나는 노동 조합과 기존의 코드베이스에서 같은 중첩 된 구조의 구조를 가지고 :중첩 된 구조체로 구조체를 다시 사용하면 GCC에서 재정의 오류가 발생합니다.
typedef union _MyUnion
{
unsigned int A;
struct _MyNestedStruct
{
int field
} MyNestedStruct;
} MyUnion;
및
typedef struct _MyStruct
{
struct _MyNestedStruct
{
int field
} MyNestedStruct;
} MyStruct;
내가 그린 힐즈 컴파일러 (GHC)에서이 컴파일하는 경우를 다음 어떤이 없습니다 문제. GCC에서 컴파일하면 오류가 발생합니다 : 'struct _MyStruct'의 오류 : 재정의.
우선 중첩 구조로 명명 된 구조로 성공적으로 컴파일 할 수 있었던 이유는 무엇입니까? 나는 GHC가 일부 C++ 규칙으로 컴파일하고 있거나 중첩 된 구조에서 명명 된 구조를 지원한다고 생각합니다.
둘째, 중요한 코드 변경없이 성공적으로 컴파일하려면 어떻게해야합니까? 중첩 된 구조체에서 _MyNestedStruct를 삭제할 수는 있지만 결과는 어떤 것입니까?
어쩌면 구조체를 실제로 재정의하고 있습니다. 왜냐하면 여기서 많은 GCC 배포판을 컴파일 할 수 있기 때문입니다. –
MyNestedStruct를 정의 대신 선언으로 변경하는 이유가 있습니까? 즉, 포함하는 공용체/구조체 외부에 _MyNestedStruct를 정의한 다음 컨테이너 내부에 구조체의 인스턴스를 선언하십시오. – cowboydan
@ FlavioToribio : 아마도 오류가 발생하기 때문에 C++로 컴파일하고있는 것일 수 있습니다. – rodrigo