2012-08-19 103 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

回答

相关问题