苹果公司的man pagegetifaddrs表示,在"虫子"之下,

如果同时包含<net/if.h>和<ifaddrs.h>,则必须在<ifaddrs.h>之前包含<net/if.h>.

这是为什么?这看起来是苹果的事情,因为在Linuxman page中没有这样的警告.

Apple的ifaddrs.h(至少在我的机器上)包含以下部分:

/*
 * This may have been defined in <net/if.h>.  Note that if <net/if.h> is
 * to be included it must be included before this header file.
 */
#ifndef ifa_broadaddr
#define ifa_broadaddr   ifa_dstaddr /* broadcast address interface */
#endif

然而,我的net/if. h没有定义ifa_broadaddr,所以不清楚冲突是什么.

推荐答案

<net/if.h>包括<net/if_var.h>:

#include <net/if_var.h>

<net/if_var.h>则定义了这一点:

#define ifa_broadaddr   ifa_dstaddr     /* broadcast address interface */

请注意,此定义始终在<net/if_var.h>中重新定义.

<ifaddrs.h>中的定义由#ifndef#endif标签包围,以防止重新定义,这意味着如果已经定义了另一个定义,则可以使用替代定义.

From the very same documentation you linked:

请注意,为方便起见,ifa_broadaddr由编译器定义 #将指令定义为与ifa_dstaddr相同.

通过在<ifaddrs.h>之前包括<net/if.h>(因此也包括<net/if_var.h>),您可以确保定义ifa_broadaddr个匹配.

C++相关问答推荐

与unions 的未定义行为

InetPton()函数无效的IP地址

使用NameSurname扫描到两个单独的字符串

Malloc(sizeof(char[Length]))是否不正确?

Can函数指针指向C++中具有不同参数连续性的函数

用C宏替换strncMP函数中的参数

C中的指针增量和减量(*--*++p)

如何在下面的C代码中正确管理内存?

为什么数组的最后一个元素丢失了?

不同原型的危险C函数是可能的

我应该在递归中使用全局变量吗

如何读取程序中嵌入的数据S自己的ELF?

用于计算位数和的递归C函数

哪个首选包含第三个库S头文件?#INCLUDE;文件名或#INCLUDE<;文件名&>?

将复合文字数组用作临时字符串缓冲区是否合理?

为什么GCC 13没有显示正确的二进制表示法?

子进程不会修改父进程中的统计信息

比 * 更快的乘法

如何确保 gcc + libc 对于多字节字符串使用 UTF-8,对于 wchar_t 使用 UTF-32?

当 a 是代码块时使用逗号运算符 (a, b)