problemi utilizzando l'interruttore -ansi in MinGW 3.4.5
Domanda
ho letto circa le bandiere usate nel GCC, e letto un reccommendation da usare gcc -ansi -pedantic -Wall file1 [file2 [file3...]] -o output
. Per la qualità della causa del mio codice, per tenerlo standard e ottenere tutti gli avvertimenti su di esso.
Bene, sulla compilazione con -ansi ...
Se includo <stdlib.h>
, gcc mi dà questo errore:
In file included from ansi.c:2:
C:/c/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:317: error: syntax error before "double"
Quella linea in questo:
inline double __cdecl __MINGW_NOTHROW strtod (const char* __restrict__ __nptr, char** __restrict__ __endptr)
{ return __strtod(__nptr, __endptr); }
non inline
non esiste in C? Non dovrebbe un colpo di testa "standard" essere standard ANSI? Devo solo togliere la linea o evitare di compilare con stdlib.h (non mi ricordo cosa è in stdlib adesso)?
Aggiorna
dalla lettura del legame che Adam ha postato ho scoperto che "in linea" non è una parola chiave in C89 e C89 è quello che viene applicata con l'interruttore -ansi. Ho dovuto cambiare a __inline__
che è, suppongo, una macro MinGW.
Grazie per l'aiuto.
Soluzione
Sembra un problema noto in MinGW: link per archiviare MinGW mailing list
Si dice che in linea non è parte dello standard C89 (come -ansi forzare) e dovrebbe essere sostituito con __inline__
invece
Se leggete prossimi e-mail, qualcuno dice che deve risolvere questo bug direttamente nelle cvs. Scopri il nuovo codice e avere uno sguardo (?) Poi ci dicono. : -)
Altri suggerimenti
in linea non è parte di ciò che gcc 3.4.5 considera ANSI C -? È parte del C99, penso Puoi confermare la versione di gcc che si sta utilizzando
Ho eseguito in questo problema prima durante la compilazione di uno standard specifico. Su un sistema Linux ero compilazione in, le intestazioni rwlock pthread non erano conformi C99 (o non sono stati in ifndef'd). Bisogna stare attenti in questi casi, e controllando l'output del preprocessore a volte può aiutare in questi casi.