在MinGW 3.4.5中使用-ansi开关的问题

时间:2009-05-17 18:23:01

标签: c gcc header mingw c89

我正在阅读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宏。

感谢您的帮助。

3 个答案:

答案 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)。在这些情况下你必须要小心,在这些情况下检查预处理器的输出有时会有所帮助。