【发布时间】:2009-05-19 15:22:32
【问题描述】:
在我们使用 gcc -std=c99 编译的一些 linux 机器上,使 struct ip_mreq 消失(包含在 netinet/in.h 中)
还有其他我们应该使用的接口吗?
【问题讨论】:
-
“消失”是什么意思?你能提供一个实际的编译器/链接器错误信息吗?
-
使用 cpp 我可以看到结构是否定义取决于 -std=c99 的存在
在我们使用 gcc -std=c99 编译的一些 linux 机器上,使 struct ip_mreq 消失(包含在 netinet/in.h 中)
还有其他我们应该使用的接口吗?
【问题讨论】:
试试 --std=gnu99。
GCC 的默认值为“--std=gnu89”,这意味着带有 GNU 扩展的 C89。通过选择“--std=c99”,您将启用 C99,但禁用 GNU 扩展。 '--std=gnu99' 将同时选择 C99 和 GNU 扩展支持,让您两全其美。
【讨论】:
-std=c99 -D_GNU_SOURCE
我认为 c99 之前没有其他界面。如果您在源代码顶部添加以下内容,则可以将其与 -std=c99 一起使用:
#define __EXTENSIONS__
但更好的方法可能是
#define _XOPEN_SOURCE
请注意,我尚未确认。
【讨论】:
我也有同样的问题。当我不提供“-std=c99”时,使用 gcc 一切都可以正常编译,但是当包含标志时,编译器无法说明类型为“struct ip_mreq”的字段“类型不完整。”
这是一个问题,因为我依赖于一些 C99 功能。
【讨论】: