2012-08-19 13 views
15

Mam następujący kod, który próbowałem skompilować. Kiedy próbowałem z std = c99, nie udało się ostrzec o "niejawnej deklaracji typu struct addrinfo" i "ukrytej deklaracji funkcji getaddrinfo". Działa ze std = gnu99.Dlaczego nie można getinfo znaleźć podczas kompilacji z gcc i std = c99

#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; 
} 

Komendy I wykorzystane do opracowania jest:

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 przetworzone nagłówka) Widzę, że kompilator ma rację: te typy nie zostały zadeklarowane w nagłówkach wciągnięta

Poszedłem więc do nagłówków i zauważyłem, że getaddrinfo jest otoczone przez strażnika #ifdef __USE_POSIX, co oczywiście nie jest zadeklarowane podczas kompilacji za pomocą c99.

Jak powiedzieć gcc, że chcę używać c99 i POSIX? Naprawdę nie chcę używać gnu99 w przypadku, gdy zdecyduję się na późniejszą zmianę kompilatorów (np. Clang lub icc).

+0

Czy próbowałeś 'gcc -c -ofail.o - Wall -Werror -std = c99 -D__POSIX -save-temps fail.c'? To lub wskaż '#define __POSIX' na górze' fail.c'. – oldrinb

+0

Nawiasem mówiąc, jesteś pewien, że to '__POSIX', a nie' _POSIX_C_SOURCE'? – oldrinb

+0

Właśnie sprawdziłem i ___USE_POSIX – dave

Odpowiedz

Powiązane problemy