ローカル IPv6 アドレスを取得するコードがあります。std=c99 を指定した gcc および clang は、これらの行でクラッシュします。
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で入手できます