c - IPv6地址获取功能?

标签 c

unsigned char networkMask [sizeof (struct in6_addr)] = { [0 ... (sizeof (struct in6_addr) - 1)] = 0xff };
什么(0...(sizeof))在这里代表。这个数组是如何分配的。

最佳答案

这个特殊的语法是 designated initializer 的 GCC 扩展.有了它,你可以像这样初始化一个数组:

unsigned char foo[<n>] = { [0 ... <n> - 1] = <k> };

<n>是成员数量和 <k>是任何给定的成员值。

在您显示的代码中,它初始化了 networkMask带有 0xff 的数组对于来自索引 0 的元素通过 sizeof(struct in6_addr) - 1 .换句话说,它初始化一个大小为 struct in6_addr 的数组。并将所有位设置为 1 .

考虑到 IPv6 地址占用 16 个字节,这将等同于:
unsigned char networkMask[sizeof(struct in6_addr)] = { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 };

关于c - IPv6地址获取功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22033079/

相关文章:

c - 从不兼容的指针类型 [默认启用] 传递参数 1 'Buffer_GetElement' 时出错?

将人类可读时间转换为纪元时间

将 char 数组转换为结构指针

c - 在 TCP/IP 聊天程序中无法工作

c - 分配的优先级

计数排序算法在 C 中不起作用

c - 在不使用外部库的情况下处理极大数量的优化方法

c - C中不同类型的静态

C - 省略了参数名称?

python - 为什么Python生成的ELF相对于原始源代码来说相当大?