コンパイルしようとしていた以下のコードがあります。 std = c99を試してみたところ、 "struct addrinfo型の暗黙の宣言"と "関数のgetaddrinfoの暗黙の宣言"に関する警告で失敗しました。これはstd = gnu99で動作します。gccとstd = c99でコンパイルするときにgetaddrinfoを見つけることができない理由
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
int fails(const char *host, const char *port, struct addrinfo *hints)
{
int rc;
struct addrinfo *results;
// can't find this function??
rc = getaddrinfo(host, port, hints, &results);
// free memory in this important application
freeaddrinfo(results);
return rc;
}
私がコンパイルに使用するコマンドは次のとおりです。
私はコンパイラが正しいと見fail.i(前処理ヘッダ)を見てみるとgcc -c -o fail.o -Wall -Werror -std=c99 -save-temps fail.c
gcc -c -o fail.o -Wall -Werror -std=gnu99 -save-temps fail.c
:これらのタイプは引っ張らヘッダで宣言されていません
私はヘッダーに行き、getaddrinfoが#ifdef __USE_POSIXガードに囲まれていることに気付きました。これは明らかにc99でコンパイルするときには宣言されていません。
gccにc99とPOSIXを使用するように指示する方法を教えてください。私は実際にコンパイラを後で切り替えることにした場合にgnu99を使いたいとは思っていません(例えばClangやiccなど)。
と
http://www.schweikhardt.net/identifiers.html
滞在あなたは 'gccの-c -ofail.oを試してみました - Wall -Werror -std = c99 -D__POSIX -save-temps fail.c'?それは、 'fail.c'の先頭にある' #define __POSIX'をポイントしてください。 – oldrinb
ところで、あなたはそれが '_POSIX_C_SOURCE'ではなく' __POSIX'だと確信していますか? – oldrinb
私はもう一度チェックしました。それは___USE_POSIXです。 – dave