Mingw 3.4.5에서 -ANSI 스위치를 사용하는 문제
문제
나는 GCC에 사용 된 깃발에 대해 읽고 있었고, 사용할 수있는 권장을 읽었습니다. gcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output
. 내 코드의 품질을 위해, 표준을 유지하고 이에 대한 모든 경고를 얻으려면.
글쎄, -ANSI로 컴파일하는 것에 대해 ... 내가 포함한다면 <stdlib.h>
, GCC는 다음 오류를 제공합니다.
In file included from ansi.c:2:
C:/c/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:317: error: syntax error before "double"
그 선은 이것입니다 :
inline double __cdecl __MINGW_NOTHROW strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr)
{ return __strtod(__nptr, __endptr); }
하다 inline
C에는 존재하지 않습니까? "표준"헤더가 표준 ANSI가되어서는 안됩니까? 인라인을 제거하거나 stdlib.h로 컴파일하지 않아야합니까 (지금 stdlib에 무엇이 있는지 기억할 수 없습니다).
업데이트
Adam이 게시 한 링크를 읽음으로써 나는 "인라인"이 C89의 키워드가 아니며 C89가 -ANSI 스위치와 시행된다는 것을 알았습니다. 나는 그것을 바꿔야했다 __inline__
그것은 Mingw 매크로라고 생각합니다.
도와 주셔서 감사합니다.
해결책
mingw에서 알려진 문제로 보인다 :아카이브 Mingw 메일 링리스트 링크
인라인은 C89 표준의 일부가 아니며 (-ANSI 강제로) 대체해야합니다. __inline__
대신에
다음 이메일을 읽으면 누군가 CVS 에서이 버그를 직접 수정했다고 말합니다. 새 코드를 확인하고 살펴본 다음 (?)를 알려주세요. :-)
다른 팁
인라인은 GCC 3.4.5가 ANSI C라고 생각하는 부분의 일부가 아닙니다. C99의 일부입니다. 어떤 버전의 GCC를 사용하고 있는지 확인할 수 있습니까?
특정 표준으로 컴파일하기 전에이 문제가 발생합니다. 내가 컴파일하고 있던 Linux 시스템에서 PTHREAD RWLOCK 헤더는 C99를 준수하지 않았거나 ifndef'd에 없었습니다). 이 경우 조심해야하며 전처리 기의 출력을 확인하면 때때로 이러한 경우에 도움이 될 수 있습니다.