我正在阅读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); }
C中不存在inline
吗?标准ansi不应该是“标准”标题吗?我应该删除内联还是避免使用stdlib.h进行编译(我现在还不记得stdlib中的内容)?
通过阅读Adam发布的链接,我发现“inline”不是C89中的关键字,C89是-ansi开关强制执行的。我不得不将其更改为__inline__
,我想这是一个MinGW宏。
感谢您的帮助。
答案 0 :(得分:2)
这似乎是mingw中的一个已知问题: link to archive mingw mailing list
它告诉内联不是c89标准的一部分(as -ansi强制它),它应该替换为__inline__
而不是
如果您阅读下一封电子邮件,有人会告诉他已直接在cvs中修复此错误。查看新代码并查看(?)然后告诉我们。 : - )
答案 1 :(得分:1)
内联不是gcc 3.4.5认为是ANSI C的一部分 - 它是C99的一部分,我想你能否确认你使用的是哪个版本的gcc?
答案 2 :(得分:1)
在编译到特定标准之前,我遇到过这个问题。在我正在编译的Linux系统上,pthread rwlock标头不符合c99(或者不是ifndef'd)。在这些情况下你必须要小心,在这些情况下检查预处理器的输出有时会有所帮助。