Ce fichier .c simple:unistd.h et C99 sur Linux
#include <unistd.h>
void test() {
char string[40];
gethostname(string,40);
}
... quand compilé normalement, fonctionne très bien:
$ cc -Wall -c -o tmp.o tmp.c
$
... mais quand compilé en mode C99, donne un avertissement:
$ cc -Wall -std=c99 -c -o tmp.o tmp.c
tmp.c: In function `test':
tmp.c:5: warning: implicit declaration of function `gethostname'
$
Le fichier résultant est bien, et reliant des œuvres. Je voudrais juste me débarrasser de l'avertissement. Je peux y arriver de manière hacker, en mettant des déclarations dans mon propre fichier .h. Qu'est-ce que C99 signifie que les déclarations dans unistd.h ne sont pas incluses? Cela peut-il être surmonté, sans renoncer à la gentillesse de C99?
Je vois le même problème pour les autres librairies standard.
+1 Traitement très approfondi. –
+1 pour une réponse. -10 pour le '#define _BSD_SOURCE'. Veuillez s'il vous plaît utiliser '#define _XOPEN_SOURCE 500' ou mieux encore dans la chaîne de compilation:' cc -D_XOPEN_SOURCE = 500 ... '. Eh bien, que si une forme de portabilité est souhaitée. – Dummy00001
Comme pour ma réponse à Luther - 'man gethostname' sur mon système Red Hat ne fait aucune mention des exigences de macro de test de fonctionnalité. Quelqu'un a une idée de pourquoi? – slim