Dlaczego nie można znaleźć getaddrinfo podczas kompilacji za pomocą gcc i std = c99

Mam następujący kod, który próbowałem skompilować. Kiedy próbowałem z std = c99, nie powiodło się z ostrzeżeniami o „niejawnej deklaracji typu struct addrinfo” i „niejawnej deklaracji funkcji getaddrinfo”. Działa ze 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;
}

Polecenia użyte do kompilacji to:

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

Patrząc na fail.i (wstępnie przetworzony nagłówek), widzę, że kompilator ma rację: te typy nie zostały zadeklarowane w nagłówkach, które zostały pobrane.

Poszedłem więc do nagłówków i zauważyłem, że getaddrinfo jest otoczone przez strażnika #ifdef __USE_POSIX, który oczywiście nie jest deklarowany podczas kompilacji z c99.

Jak mogę powiedzieć gcc, że chcę używać c99 i POSIX? Naprawdę nie chcę używać gnu99 w przypadku, gdy zdecyduję się później przełączać kompilatory (np. Clang lub icc).

questionAnswers(1)

yourAnswerToTheQuestion