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/