fileno, F_LOCK e F_ULOCK diventano non dichiarati e non disponibili quando aggiungo flag std = c99 a gcc
Domanda
Ho queste intestazioni in un codice c
#include <stdio.h>
#include <unistd.h>
Tutto compilato bene fino a quando non ho aggiunto -std = c99 flag al comando gcc (per abilitare limitare ). E questo ha innescato i seguenti errori.
avviso: dichiarazione implicita di funzione
fileno
errore:
F_LOCK
non dichiarato (primo utilizzo in questa funzione)
errore: (ogni identificatore non dichiarato è segnalato solo una volta errore: per ogni funzione in cui appare.)
errore:F_ULOCK
non dichiarato (primo utilizzo in questa funzione
Qualche idea per risolvere questi errori / avvertimenti?
Soluzione
Devi dire alle intestazioni che vuoi le estensioni POSIX. In questi giorni, utilizzo:
#if __STDC_VERSION__ >= 199901L
#define _XOPEN_SOURCE 600
#else
#define _XOPEN_SOURCE 500
#endif /* __STDC_VERSION__ */
Se sto compilando con -std = c89
, fornisce la versione POSIX corretta; se si compila con -std = c89
, si ottiene la versione POSIX corretta. Lo uso su Solaris 9 e 10, MacOS X (10.4.x, 10.5.x), HP-UX 11.x, Linux (RHEL4 e 5, SuSE 9 e 10) e AIX 5.xe 6.x - AFAICR , senza problemi finora.
Questa stanza dovrebbe apparire prima che vengano incluse le intestazioni di sistema (nella propria intestazione o in ciascun file sorgente), oppure è necessario ottenere lo stesso effetto con -D_XOPEN_SOURCE = 600
sul comando del compilatore linea o qualche altro meccanismo simile.
Altri suggerimenti
Prova
-std=gnu99
per abilitare tutte le estensioni e continuare a utilizzare i miglioramenti del linguaggio C99.
Potresti provare a -D_BSD_SOURCE per abilitare gli is-BSD o -D_SVID_SOURCE per abilitare gli is-V di sistema