質問: sock_stream ; getaddrinfo( null, "echo", &addrinfo_hint, &addrinfo ) ; } これをコンパイルしようとすると・・・ gcc -std=c99 -o sample sample.c -std=c99をつけなければコンパイルできるのですが、 -std=c99をつけると、getaddrinfo関数や、関連する構造体やマクロが まったく定義されなくなってしまうようで、 未定義関係のエラーが大量にでてしまいます。 getaddrinfoのmanを見ても、特に問題になりそうなことは書いていないのですが・・・ なぜなのでしょうか? c99を使わない以外に、解決方法ないでしょうか?
回答: -std=c99 を付けると、基本的には c99 にある関数しか使えなくなります。getaddrinfo のような unix 固有の関数を使うには機能検査マクロが必要です。 とりあえずソースの最初 (#include よりも前) に #define _posix_c_source 200112l の一行を入れてみてください。 これを書くことで、unix の共通規格である posix.1-2001 で定められた機能が (本来の c99 にないものも含めて) 使えるようになります。