fileno, F_LOCK et F_ULOCK deviennent non déclarés et indisponibles lorsque j'ajoute std = c99 flag à gcc

StackOverflow https://stackoverflow.com/questions/1423185

  •  07-07-2019
  •  | 
  •  

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?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top