Este sencillo archivo .c:unistd.h y C99 en Linux
#include <unistd.h>
void test() {
char string[40];
gethostname(string,40);
}
... cuando se compila normalmente, funciona bien:
$ cc -Wall -c -o tmp.o tmp.c
$
... pero cuando se compila en modo C99, da una advertencia:
$ cc -Wall -std=c99 -c -o tmp.o tmp.c
tmp.c: In function `test':
tmp.c:5: warning: implicit declaration of function `gethostname'
$
El archivo .o resultante está bien, y el enlace funciona. Me gustaría deshacerme de la advertencia. Puedo lograr esto de una manera hacky, poniendo declaraciones en mi propio archivo .h.
¿Qué tiene C99 que significa que las declaraciones en unistd.h no se incluyen? ¿Se puede superar esto, sin renunciar a la bondad de C99?
Veo el mismo problema para otras librerías estándar.
+1 Tratamiento muy completo. –
+1 por una respuesta. -10 para el '#define _BSD_SOURCE'. Utilice '#define _XOPEN_SOURCE 500' o mejor aún en la cadena de compilación:' cc -D_XOPEN_SOURCE = 500 ... '. Bueno, eso si se desea cualquier tipo de portabilidad. – Dummy00001
Al igual que con mi respuesta a Luther, 'man gethostname' en mi sistema Red Hat no menciona los requisitos de macro de prueba de características. Alguien tiene alguna idea de por qué? – slim