【问题标题】:struct ip_mreq disappears when compiling with -std=c99使用 -std=c99 编译时,struct ip_mreq 消失
【发布时间】:2009-05-19 15:22:32
【问题描述】:

在我们使用 gcc -std=c99 编译的一些 linux 机器上,使 struct ip_mreq 消失(包含在 netinet/in.h 中)

还有其他我们应该使用的接口吗?

【问题讨论】:

  • “消失”是什么意思?你能提供一个实际的编译器/链接器错误信息吗?
  • 使用 cpp 我可以看到结构是否定义取决于 -std=c99 的存在

标签: c linux sockets


【解决方案1】:

试试 --std=gnu99。

GCC 的默认值为“--std=gnu89”,这意味着带有 GNU 扩展的 C89。通过选择“--std=c99”,您将启用 C99,但禁用 GNU 扩展。 '--std=gnu99' 将同时选择 C99 和 GNU 扩展支持,让您两全其美。

【讨论】:

  • 或使用-std=c99 -D_GNU_SOURCE
【解决方案2】:

我认为 c99 之前没有其他界面。如果您在源代码顶部添加以下内容,则可以将其与 -std=c99 一起使用:

#define __EXTENSIONS__

但更好的方法可能是

#define _XOPEN_SOURCE

请注意,我尚未确认。

【讨论】:

    【解决方案3】:

    我也有同样的问题。当我不提供“-std=c99”时,使用 gcc 一切都可以正常编译,但是当包含标志时,编译器无法说明类型为“struct ip_mreq”的字段“类型不完整。”

    这是一个问题,因为我依赖于一些 C99 功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-15
      • 2013-03-06
      • 1970-01-01
      • 2017-01-17
      相关资源
      最近更新 更多