Come sono C ++ - commenti in stile trattati in GCC 4.3.3 di default?
Domanda
Sto usando il GCC 4.3.3 su Ubuntu 9.04 a 64 bit e si stava errori utilizzando C ++ - commenti in stile nel codice C. Quando dico "per difetto" nel titolo, voglio dire semplicemente invocando gcc test.c
Secondo i GCC 4.3.3 Docs ( qui ), questo è supportato ... eppure ho ottenuto gli errori in ogni caso.
Questi errori sono andati via con un semplice -std = c99 Oltre alla mia stringa di compilazione, quindi il mio problema è risolto. Curioso di sapere se gli esperti del CCG là fuori avevano una spiegazione per questo, come mi sembra essere una chiara contraddizione con la documentazione.
#include <stdio.h>
// this is a comment
int main( void )
{
return 0;
}
Soluzione
Per defualt GCC sta usando C89 / 90 di serie con estensioni GCC. A rigor di termini per impostazione predefinita, non è aderente a qualsiasi norma specifica, dal momento che per impostazione predefinita non emetterà alcun messaggio di diagnostica in situazioni in cui tali messaggi sono richieste dalla norma. È necessario eseguire gcc in modalità -ansi -pedantic
(eventualmente anche -Wall
) al fine di farlo aderire allo standard. E in questo caso si dovrà, ancora una volta, C89 / 90.
Altri suggerimenti
E 'possibile Ubuntu è sovrascrivendo il default, che dovrebbe essere gnu89 . Di certo non ho ricevuto che, con la mia copia di GCC 4.3 (su Debian).
% echo '// foo' | gcc-4.3 -x c -c -
% echo '// foo' | gcc-4.3 -std=gnu89 -x c -c -
% echo '// foo' | gcc-4.3 -std=c89 -x c -c -
<stdin>:1: error: expected identifier or '(' before '/' token
http://gcc.gnu.org/onlinedocs/gcc/Standards.html#Standards
L'impostazione predefinita, se non il dialetto linguaggio C le opzioni sono date, è -std = gnu89
E // comments
sono riconosciuti da -std=gnu89