2012-08-19 132 views
15

我有下面的代碼,我試圖編譯。當我嘗試使用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; 
} 

我用來編譯的命令是:

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 

看着fail.i(預處理頭)我看到的編譯器是正確的:這些類型沒有在頭被宣佈爲拉

所以我去了頭文件,注意到getaddrinfo被一個警衛#ifdef __USE_POSIX包圍,這顯然在用c99編譯時沒有聲明。

如何告訴gcc我想使用c99和POSIX?如果我以後決定切換編譯器(例如Clang或icc),我並不想使用gnu99。

+0

您是否嘗試過'GCC -c -ofail.o - Wall -Werror -std = c99 -D__POSIX -save-temps fail.c'?或者在'fail.c'的頂部指向'#define __POSIX'。 – oldrinb 2012-08-19 06:35:27

+0

順便問一下,你確定它是'__POSIX'而不是'_POSIX_C_SOURCE'嗎? – oldrinb 2012-08-19 06:37:36

+0

我只是再次檢查,它是___USE_POSIX – dave 2012-08-19 06:39:38

回答

相關問題