Opzioni GCC per applicare il controllo standard Ansi C?
Domanda
Quali opzioni gcc devo usare per applicare avvisi / errori ANSI C (C99)? gcc (GCC) 3.4.2 (mingw-special)
Sto usando: gcc -pedantic -ansi -std = c99 è corretto?
Soluzione
Il flag -ansi
è sinonimo del flag -std = c89
.
Basta usare -std = c99
con -pedantic
dovrebbe essere sufficiente.
In caso di dubbio, puoi sempre fare riferimento alla documentazione GCC . A partire da GCC 3.4.2, il capitolo da leggere è 2 - Standard linguistici supportati da GCC .
Altri suggerimenti
Questa è una vecchia domanda, ma volevo solo aggiungere alcuni punti extra.
In primo luogo, indipendentemente dall'insieme di opzioni della riga di comando generiche fornite a GCC, al momento non sembra possibile fare in modo che GCC segnali tutte le violazioni di vincoli come "errori". e tutto il resto come "avvertimenti". Alcuni dei messaggi diagnostici che GCC riporta come "avvisi" sono in effetti violazioni di vincoli (cioè "errori") dal punto di vista del linguaggio C, ma non c'è modo di forzare GCC a riconoscere quel fatto e generare un "errore"; diagnostico. Molto probabilmente una separazione più precisa può essere ottenuta perfezionando i singoli tipi di avviso, ma non sono sicuro che le impostazioni GCC forniscano una granularità sufficiente per ottenere una buona corrispondenza.
In secondo luogo, GCC fornisce l'opzione -pedantic-errors
che può essere utilizzata al posto del semplice -pedantic
, che ha lo scopo di consentire una più precisa (come descritto sopra) classificazione dei messaggi diagnostici in "errori" e "avvisi". Tuttavia non è ancora perfetto.
P.S. Le specifiche della lingua 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 avvertenze / errori" nella tua domanda.
-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 interessante, ma solo -pedantic
dovrebbe fare quello che vuoi.