使用-std = c99进行编译时,struct ip_mreq消失

时间:2009-05-19 15:22:32

标签: c linux sockets

在我们的一些linux盒子上用gcc -std = c99进行编译使得struct ip_mreq消失了(包含在netinet / in.h中)

我们应该使用其他界面吗?

3 个答案:

答案 0 :(得分:5)

尝试--std = gnu99。

GCC的默认值是'--std = gnu89',这意味着C89具有GNU扩展名。通过选择'--std = c99',您将启用C99,但禁用GNU扩展。 '--std = gnu99'将选择C99和GNU扩展支持,为您提供两全其美的优势。

答案 1 :(得分:0)

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

#define __EXTENSIONS__

但更好的方法可能是

#define _XOPEN_SOURCE

请注意,我还没有确认。

答案 2 :(得分:0)

我遇到了同样的问题。当我不提供“-std = c99”时,使用gcc编译所有内容都很好,但是当包含该标志时,编译器无法说明类型为'struct ip_mreq'的字段的类型不完整。“

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