문제

Windows와 Linux에서 컴파일 해야하는 응용 프로그램을 작성하고 있습니다. 응용 프로그램은 C로 작성되며 Mingw 컴파일러가이를 거부하는 것을 제외하고는 거의 모든 것이 작동합니다.

typedef struct somestruct{
   ...snip...
   enum {NODE, REAL} type;
};

somestruct* something;
switch (something->type){
 case NODE:
   ...stuff...;
   break;
 case REAL:
   ...otherstuff...;
   break;
}

노드와 실제는 정의되지 않았지만 스코프 해상도를 제공하는 경우

case somestruct::NODE

이것은 Mingw 3.4.1로 컴파일되지만 Linux에서 GCC 4.1.2로 컴파일하지 못합니다. 이것은 단순히 전처리 기와 함께 해결 해야하는 컴파일러 문제입니까, 아니면 다른 설명이 있습니까?

도움이 되었습니까?

해결책

둥지를 제거하면 이는 휴대 할 수있게 작동해야합니다.

typedef enum somestruct_type {
    somestruct_type_NODE, somestruct_type_REAL
} somestruct_type;
typedef struct somestruct {
   ...snip...
   somestruct_type type;
} somestruct;

나는 이것과 매우 유사한 코드가 많은 C 및 C ++ 컴파일러로 포팅되는 것을 보았다.

(나는 이것이 유일한 방법이라고 말하는 것이 아닙니다. 나는 단지 이런 식으로 효과가 있다고 말하고 있습니다).

다른 팁

앱은 "C"로 작성되었지만 컴파일러는 귀하가 수행해야합니다. somestruct::NODE, 유효한 "C ++"이지만 유효한 "C"는 유효하지 않습니다.

결론 : C ++ 모드에서 MINGW를 사용하지만 C 모드의 다른 모든 컴파일러와 함께이 코드를 컴파일하고 있습니다.

가능한 원인 : Mingw는 치료하지 않을 수 있습니다 foo.C 그리고 foo.c 동일하게 파일은 Capital C 접미사로 명명됩니다 (UNIX의 C ++를 암시).

해결책 : 추가 -xc Mingw에게 플래그를 강제하여 플레인 C 컴파일을 강요합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top