fileno, F_LOCK e F_ULOCK diventano non dichiarati e non disponibili quando aggiungo flag std = c99 a gcc

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

  •  07-07-2019
  •  | 
  •  

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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top