Quali opzioni di gcc devo utilizzare per applicare avvertimenti/errori ANSI C (C99)? gcc (GCC) 3.4.2 (mingw-speciale)Opzioni GCC per far rispettare il controllo standard Ansi C?
sto usando: gcc -pedantic -ansi -std = C99 è corretto?
Quali opzioni di gcc devo utilizzare per applicare avvertimenti/errori ANSI C (C99)? gcc (GCC) 3.4.2 (mingw-speciale)Opzioni GCC per far rispettare il controllo standard Ansi C?
sto usando: gcc -pedantic -ansi -std = C99 è corretto?
Il flag -ansi
è sinonimo di flag -std=c89
.
Utilizzare semplicemente -std=c99
con -pedantic
dovrebbe essere sufficiente.
In caso di dubbio, è sempre possibile refer to the GCC documentation. A partire da GCC 3.4.2, il capitolo da leggere è 2 - Language Standards Supported by GCC.
-ansi
In C mode, this is equivalent to -std=c89. In C++ mode, it is equivalent to -std=c++98.
ANSI C non è lo stesso di C99 (ancora). Inoltre, -Wall
potrebbe anche essere di interesse, ma solo -pedantic
dovrebbe fare quello che vuoi.
"ANSI C non è uguale a C99". ANSI ha adottato C99 come standard. È solo che, per qualsiasi motivo, la C89 è stata chiamata "ANSI C", per distinguerla dalla pre-standard C, e il nome è rimasto intatto. –
Questa è una vecchia domanda ma volevo solo aggiungere alcuni punti extra.
In primo luogo, indipendentemente dal set di generica riga di comando che si forniscono a GCC, attualmente non sembra essere possibile fare GCC per segnalare tutte le violazioni dei vincoli come "errori" e tutto il resto come "avvertimenti ". Alcuni dei messaggi diagnostici che GCC riporta come "avvertenze" sono in effetti violazioni dei vincoli (ovvero "errori") dal punto di vista del linguaggio C, ma non c'è modo di forzare GCC a riconoscere tale fatto e generare un "errore" diagnostico. Molto probabilmente è possibile ottenere una separazione più precisa accordando i singoli tipi di avvertimento, ma non sono sicuro che le impostazioni GCC forniscano una granularità sufficiente per ottenere una buona corrispondenza.
secondo luogo, GCC prevede -pedantic-errors
opzione che può essere utilizzato al posto del normale -pedantic
, che è destinato a consentire una più precisa (come descritto sopra) classificazione dei messaggi diagnostici in "errori" e "avvertimenti". Non è ancora perfetto però.
P.S. Le specifiche del linguaggio non richiedono/definiscono la separazione dei messaggi diagnostici in "errori" e "avvisi", ma in pratica molti programmatori prevedono che le violazioni dei vincoli vengano segnalate come "errori". Ho pensato che avresti potuto significare qualcosa del genere quando hai menzionato "applicare avvertimenti/errori" nella tua domanda.
Buone osservazioni. Ad ogni modo, credo che poiché C consente così tante cose pericolose, l'unico modo corretto di lavorare è gestire * qualsiasi * avviso come un errore (cioè non si è fatto fino a quando non costruisce con '-Werror'). Quindi non importa se alcuni errori vengono erroneamente segnalati come avvertenze. – sleske
L'ANSI ha pubblicato lo standard C originale nel 1989. ISO ha pubblicato la sua versione dello stesso standard nel 1990 e l'ANSI ha adottato ufficialmente quella versione. ISO ha pubblicato le nuove edizioni dello standard nel 1999 e nel 2011, e ANSI ha adottato ognuna di esse, rendendo le precedenti edizioni ufficialmente obsolete. Confusamente, il termine "ANSI C" è ancora comunemente (e non correttamente) usato per riferirsi alla lingua definita dalle edizioni 1989/1990, e 'gcc -ansi' si riferisce ancora a quella versione. Suggerisco che il termine "ANSI C" sia ambiguo e dovrebbe essere evitato. Fare riferimento a C89/C90, C99 o C11. –