我有一段代码,它获取本地IPv6地址。gcc和std=c99在这些线路上崩溃:
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上获得
发布于 2012-04-17 00:54:06
从2007-2009年的相关帖子来看,似乎是OSX的产物,
+#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
发布于 2012-04-17 00:56:18
请参见结构in6_addr的声明。您需要编译为gnu99才能获得扩展。
BTW错误!=崩溃
https://stackoverflow.com/questions/10177804
复制相似问题