fileno, F_LOCK et F_ULOCK deviennent non déclarés et indisponibles lorsque j'ajoute std = c99 flag à gcc
Question
J'ai ces en-têtes dans un code c
#include <stdio.h>
#include <unistd.h>
Tout est bien compilé jusqu'à ce que j'ajoute l'option -std = c99 à la commande gcc (pour activer restreindre ). Et cela a déclenché les erreurs suivantes.
warning: déclaration implicite de fonction
fileno
erreur:
F_LOCK
non déclaré (première utilisation dans cette fonction)
erreur: (chaque identifiant non déclaré est signalé une seule erreur: il apparaît dans chaque fonction.)
erreur:F_ULOCK
non déclaré (première utilisation dans cette fonction
Des idées pour résoudre ces erreurs / avertissements?
La solution
Vous devez indiquer aux en-têtes que vous souhaitez utiliser les extensions POSIX. Ces jours-ci, j'utilise:
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
Si je compile avec -std = c89
, cela donne la version POSIX correcte; si vous compilez avec -std = c89
, cela donne la version POSIX correcte. Je l’utilise sous Solaris 9 et 10, MacOS X (10.4.x, 10.5.x), HP-UX 11.x, Linux (RHEL4 et 5, SuSE 9 et 10) et AIX 5.x et 6.x - AFAICR. , sans problèmes jusqu'à présent.
Cette strophe doit apparaître avant que les en-têtes système soient inclus (dans votre propre en-tête ou dans chaque fichier source), ou vous devez obtenir le même effet avec -D_XOPEN_SOURCE = 600
dans la commande du compilateur. ligne, ou un autre mécanisme similaire.
Autres conseils
Essayez
-std=gnu99
pour activer toutes les extensions et continuer à utiliser les améliorations du langage C99.
Vous pouvez essayer -D_BSD_SOURCE pour activer BSD-isms ou -D_SVID_SOURCE pour activer System-V isms