c语言 - 为什么在使用 gcc 和 std=c99 编译时找不到 getaddrinfo



我有以下代码,我正在尝试编译。当我尝试使用 std=c99 时,它失败了,并显示有关"结构结构 addrinfo 类型的隐式声明"和"函数 getaddrinfo 的隐式声明"的警告。它适用于 std=gnu99。

#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?我真的不想使用 gnu99,以防我决定稍后切换编译器(例如 Clang 或 icc)。

仅仅因为getaddrinfo(POSIX.1g扩展)不是标准c99的一部分:

http://www.schweikhardt.net/identifiers.html

-std=gnu99-D_POSIX_C_SOURCE=200112L同住

最新更新