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

在我们的一些linux boxen使用gcc -std = c99编译会使struct ip_mreq消失(从netinet / in.h包含)

有一些其他的接口,我们应该使用?

试试–std = gnu99。

GCC的默认值是'–std = gnu89',这意味着C89和GNU扩展。 通过选择“–std = c99”,你可以启用C99,但禁用GNU扩展。 '–std = gnu99'将选择C99和GNU扩展支持,为您提供两全其美的解决方案。

我不认为有另一个接口前c99。 如果您在源代码的顶部添加以下内容,则可以将其用于-std=c99

 #define __EXTENSIONS__ 

但更好的方法可能是

 #define _XOPEN_SOURCE 

请注意,我还没有确认。

我有同样的问题。 当我没有提供“-std = c99”时,所有的东西都编译得很好,但是当标志被包含时,编译器会失败,说类型为“struct ip_mreq'”的字段的类型是不完整的。

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