¿Por qué no se puede encontrar getaddrinfo al compilar con gcc y std = c99?
Tengo el siguiente código que estaba tratando de compilar. Cuando intenté con std = c99, fallaron las advertencias sobre "declaración implícita de tipo struct addrinfo" y "declaración implícita de función getaddrinfo". Funciona con 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;
}
Los comandos que utilicé para compilar son:
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
En busca de fail.i (encabezado preprocesado) veo que el compilador es correcto: esos tipos no se han declarado en los encabezados introducidos.
Así que fui a los encabezados y noté que getaddrinfo está rodeado por un guardia #ifdef __USE_POSIX, que obviamente no se declara al compilar con c99.
¿Cómo le digo a gcc que quiero usar c99 y POSIX? Realmente no quiero usar gnu99 en caso de que decida cambiar los compiladores más tarde (por ejemplo, Clang o icc).