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

发布于 2024-07-20 21:09:48 字数 843 浏览 3 评论 0原文

我正在阅读有关 gcc 中使用的标志的信息,并阅读了使用 gcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output 的建议。 为了我的代码质量,保持它的标准,并得到所有关于它的警告。

好吧,关于使用 -ansi 进行编译... 如果我包含 ,gcc 会给出以下错误:

In fileincluded from ansi.c:2: C:/c/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:317:错误:“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 宏。

谢谢您的帮助。

I was reading about the flags used in gcc, and read a reccommendation to use gcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output. For the quality of my code's sake, to keep it standard, and get all the warnings about it.

Well, about compiling with -ansi...
If I include <stdlib.h>, gcc gives me this error:

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"

That line in is this:

inline double __cdecl __MINGW_NOTHROW strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr)
{ return __strtod(__nptr, __endptr); }

does inline not exist in C? Shouldn't a "standard" header be standard ansi? Should I just remove the inline or avoid compiling with stdlib.h (I can't really remember what's in stdlib right now)?

Update

from reading the link which Adam posted I found out that "inline" isn't a keyword in C89, and C89 is what is enforced with the -ansi switch. I had to change it to __inline__ which is, I suppose, a MinGW macro.

Thanks for the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

|煩躁 2024-07-27 21:09:48

这似乎是 mingw 中的一个已知问题:
链接到存档 mingw 邮件列表

它表明 inline 不是 c89 标准的一部分(因为 -ansi 强制它),应该用 __inline__ 代替

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

It seems a known issue in mingw:
link to archive mingw mailing list

It tells that inline is not part of the c89 standard (as -ansi force it) and it should be replaced with __inline__ instead

If you read next e-mails, someone tells he has fix this bug directly in the cvs. Check out the new code and have a look (?) then tell us. :-)

软糯酥胸 2024-07-27 21:09:48

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

inline is not part of what gcc 3.4.5 considers to be ANSI C - it is part of C99, I think Can you confirm which version of gcc you are using?

少跟Wǒ拽 2024-07-27 21:09:48

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

I've run into this problem before when compiling to a specific standard. On a Linux system I was compiling to, the pthread rwlock headers weren't c99 compliant (or weren't ifndef'd in). You have to be careful in these cases, and checking the output of the preprocessor can sometimes help in these cases.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文