首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >结构in6_addr在gcc c99上崩溃

结构in6_addr在gcc c99上崩溃
EN

Stack Overflow用户
提问于 2012-04-17 00:15:11
回答 2查看 1.8K关注 0票数 1

我有一段代码,它获取本地IPv6地址。gcc和std=c99在这些线路上崩溃:

代码语言:javascript
运行
复制
ipv6addr.s6_addr16[i] = htons((unsigned short int)tmp);

if (!(IN6_IS_ADDR_LOOPBACK(ipv6addr.s6_addr32)
        || IN6_IS_ADDR_UNSPECIFIED(ipv6addr.s6_addr32)
        || IN6_IS_ADDR_LINKLOCAL(ipv6addr.s6_addr32))){

ipv6.c:43:13: error: no member named 's6_addr16' in 'struct in6_addr'
                    ipv6addr.s6_addr16[i] = htons((unsigned short int)tmp);
                    ~~~~~~~~ ^
ipv6.c:45:39: error: no member named 's6_addr32' in 'struct in6_addr'
            if (!(IN6_IS_ADDR_LOOPBACK(ipv6addr.s6_addr32)
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~

等。

使用标准选项进行编译会导致编译成功。为什么会这样呢?完整源代码可在http://pastebin.com/hQ3VBSKe上获得

EN

回答 2

Stack Overflow用户

发布于 2012-04-17 00:54:06

从2007-2009年的相关帖子来看,似乎是OSX的产物,

代码语言:javascript
运行
复制
+#if defined(__APPLE__) || defined(__darwin__)
+/* OSX seems not to define these. */
+#ifndef s6_addr16
+#define s6_addr16 __u6_addr.__u6_addr16
+#endif
+#ifndef s6_addr32
+#define s6_addr32 __u6_addr.__u6_addr32
+#endif
+#endif

http://archives.seul.org/or/cvs/Jul-2007/msg00167.html

另外,

RFC 2553、UNP和SUS、in6_addr{}仅需要s6_addr

http://seclists.org/nmap-dev/2009/q1/493

票数 2
EN

Stack Overflow用户

发布于 2012-04-17 00:56:18

请参见结构in6_addr的声明。您需要编译为gnu99才能获得扩展。

BTW错误!=崩溃

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10177804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档