Questo semplice file .c:unistd.h e C99 su Linux
#include <unistd.h>
void test() {
char string[40];
gethostname(string,40);
}
... quando compilato normalmente, funziona bene:
$ cc -Wall -c -o tmp.o tmp.c
$
... ma quando compilato in modalità C99, dà un avvertimento:
$ cc -Wall -std=c99 -c -o tmp.o tmp.c
tmp.c: In function `test':
tmp.c:5: warning: implicit declaration of function `gethostname'
$
Il file .o risultante va bene e il collegamento funziona. Mi piacerebbe solo sbarazzarmi dell'avvertimento. Posso ottenere questo in modo hacky, inserendo le dichiarazioni nel mio file .h.
Di cosa si tratta C99, ciò significa che le dichiarazioni in unistd.h non vengono incluse? Questo può essere superato, senza rinunciare alla simpatia di C99?
Vedo lo stesso problema per altre librerie standard.
+1 Trattamento molto accurato. –
+1 per una risposta. -10 per il '#define _BSD_SOURCE'. Si prega di utilizzare '#define _XOPEN_SOURCE 500' o meglio ancora nella catena di build:' cc -D_XOPEN_SOURCE = 500 ... '. Bene, questo se si desidera qualsiasi tipo di portabilità. – Dummy00001
Come con la mia risposta a Luther - 'man gethostname' sul mio sistema Red Hat non fa menzione dei Requisiti Macro di Feature Test. Qualcuno ha qualche idea del perché? – slim