Почему не удается найти getaddrinfo при компиляции с помощью gcc и std=c99

У меня есть следующий код, который я пытался скомпилировать. Когда я пытался использовать std=c99, он не работал с предупреждениями о "неявном объявлении типа struct 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 ).

17
задан dave 19 August 2012 в 06:39
поделиться