fileno, F_LOCK und F_ULOCK werden nicht gemeldete und nicht verfügbar, wenn ich std = c99-Flag auf gcc hinzufügen

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

  •  07-07-2019
  •  | 
  •  

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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top