문제
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 컴파일을 강요합니다.
제휴하지 않습니다 StackOverflow