在我们的一些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功能。