2009-09-14 7 views
6

Je ces en-têtes dans le code acfileno, F_LOCK et F_ULOCK deviennent non déclarées et non disponible quand j'ajoute drapeau std = c99 gcc

#include <stdio.h> 
#include <unistd.h> 

Tout compilé bien jusqu'à ce que j'ai ajouté std = drapeau C99 à commande gcc (pour activer restrict). Et cela a déclenché les erreurs suivantes.

warning: implicit declaration of function fileno

error: F_LOCK undeclared (first use in this function)
error: (Each undeclared identifier is reported only once error: for each function it appears in.)
error: F_ULOCK undeclared (first use in this function

Des idées pour contourner ces erreurs/avertissements?

Répondre

8

Vous devez indiquer aux en-têtes que vous souhaitez 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 compiler avec -std=c89, il donne la version correcte POSIX; Si vous compilez avec -std=c89, il donne la bonne version POSIX. Je l'utilise sur 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 les en-têtes système (dans votre propre en-tête ou dans chaque fichier source) ou vous devez obtenir le même effet avec -D_XOPEN_SOURCE=600 sur la ligne de commande du compilateur ou un autre mécanisme similaire.

1

Vous pourriez -D_BSD_SOURCE essayer d'activer BSD-ismes ou -D_SVID_SOURCE pour permettre ismes système V-

+0

Utilisez '-D_DARWIN_C_SOURCE' sur MacOS X; '-D__EXTENSIONS__' sur Solaris; '-D_GNU_SOURCE' sur Linux; et la liste continue (pas sûr de ce que sont les équivalents sur HP-UX et AIX, mais ils existent, presque certainement). –

5

Essayez

-std=gnu99 

pour activer toutes les extensions et utiliser encore les améliorations linguistiques C99.

Questions connexes