문제

나는 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에 없었습니다). 이 경우 조심해야하며 전처리 기의 출력을 확인하면 때때로 이러한 경우에 도움이 될 수 있습니다.

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