2

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

谢谢您的帮助。

4

3 回答 3

2

这似乎是 mingw 中的一个已知问题: link to archive mingw mailing list

它告诉 inline 不是 c89 标准的一部分(因为 -ansi 强制它),它应该被替换__inline__

如果您阅读下一封电子邮件,有人会告诉他已直接在 cvs 中修复了此错误。查看新代码并查看(?)然后告诉我们。:-)

于 2009-05-17T18:31:01.950 回答
1

inline 不是 gcc 3.4.5 认为是 ANSI C 的一部分 - 它是 C99 的一部分,我想你能确认你使用的是哪个版本的 gcc 吗?

于 2009-05-17T18:34:57.777 回答
1

在编译到特定标准之前,我遇到过这个问题。在我正在编译的 Linux 系统上,pthread rwlock 标头不符合 c99 标准(或者不符合 ifndef 标准)。在这些情况下你必须小心,检查预处理器的输出有时会在这些情况下有所帮助。

于 2009-05-17T18:53:36.743 回答