fileno, F_LOCK und F_ULOCK werden nicht gemeldete und nicht verfügbar, wenn ich std = c99-Flag auf gcc hinzufügen
Frage
Ich habe diese Header in einem C-Code
#include <stdio.h>
#include <unistd.h>
Alles in Ordnung zusammengestellt, bis ich -std = c99-Flag auf gcc-Befehl hinzugefügt (aktivieren zu beschränken ). Und das löste die folgenden Fehler.
Warnung: implizite Erklärung Funktion
fileno
Fehler:
F_LOCK
nicht deklariert (erster Einsatz in dieser Funktion)
Fehler: (Jeder undeclared Identifikator nur einmal Fehler gemeldet: für jede Funktion in es angezeigt wird.)
Fehler:F_ULOCK
undeclared (erste Nutzung in dieser Funktion
Irgendwelche Ideen, diese Fehler / Warnungen zu umgehen?
Lösung
Sie müssen die Header sagen, dass Sie die POSIX-Erweiterungen wollen. In diesen Tagen, die ich benutze:
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
Wenn ich mit -std=c89
bin kompilieren, gibt es die richtige POSIX-Version; wenn Sie mit -std=c89
kompilieren, gibt es die richtige POSIX-Version. Ich verwende diese auf Solaris 9 und 10, MacOS X (10.4.x, 10.5.x), HP-UX 11.x, Linux (RHEL4 und 5, SuSE 9 und 10) und AIX 5.x und 6.x - AFAICR ohne Probleme, so weit.
sollte Diese Strophe erscheinen, bevor System-Header (in Ihrem eigenen Header oder in jeder Quelldatei) enthalten sind, oder Sie brauchen, um den gleichen Effekt mit -D_XOPEN_SOURCE=600
auf der Compiler-Befehlszeile oder einen anderen ähnlichen Mechanismus zu erreichen.
Andere Tipps
Versuchen
-std=gnu99
alle Erweiterungen zu ermöglichen und dennoch die C99 Spracherweiterungen verwenden.
Sie könnten versuchen, -D_BSD_SOURCE BSD-isms oder -D_SVID_SOURCE zu ermöglichen, damit System-V-Ismen