Diese einfache C-Datei:unistd.h und c99 auf Linux
#include <unistd.h>
void test() {
char string[40];
gethostname(string,40);
}
... wenn normalerweise kompiliert, funktioniert gut:
$ cc -Wall -c -o tmp.o tmp.c
$
... aber wenn in C99-Modus kompiliert, gibt eine Warnung:
$ cc -Wall -std=c99 -c -o tmp.o tmp.c
tmp.c: In function `test':
tmp.c:5: warning: implicit declaration of function `gethostname'
$
Die resultierende O-Datei ist in Ordnung, und die Verknüpfung funktioniert. Ich möchte nur die Warnung loswerden. Ich kann dies auf eine hacky Weise erreichen, indem ich Deklarationen in meine eigene .h-Datei setze.
Was bedeutet C99, dass die Deklarationen in unistd.h nicht enthalten sind? Kann dies überwunden werden, ohne die Nettigkeit von C99 aufzugeben?
Ich sehe das gleiche Problem für andere Standard-Bibliotheken.
+1 Sehr gründliche Behandlung. –
+1 für eine Antwort. -10 für die '#define_BSD_SOURCE'. Bitte verwenden Sie '#define _XOPEN_SOURCE 500' oder besser noch in der Baukette:' cc -D_XOPEN_SOURCE = 500 ... '. Nun, wenn irgendeine Art von Portabilität gewünscht wird. – Dummy00001
Wie bei meiner Antwort auf Luther - 'Mann gethostname' auf meinem Red Hat-System erwähnt keine Feature Test Makro Anforderungen. Jeder hat eine Idee warum? – slim