2010-08-29 4 views
9

Sono un po 'perplesso leggendo questo: Gcc 4.5 online manual --- Standards section.g ++ standard support

Essi spiegano questo

standard di L'originale ISO C++ è stato pubblicato come standard ISO (ISO/IEC 14882: 1998) e modificato da un Rettifiche tecnico pubblicato nel 2003 (ISO/IEC 14882: 2003). Questi standard sono indicati rispettivamente come C++ 98 e C++ 03. GCC implementa la maggior parte di C++ 98 (l'esportazione è un'eccezione notevole) e la maggior parte delle modifiche in C++ 03.

Ma non dicono se gcc supporta il C++ 'bare' 98 o solo il C++ 03 corretto. Nella sezione "Lingua C" la spiegazione è più chiara:

Errori nello standard ISO C 1999 sono stati corretti in tre correzioni tecniche pubblicate nel 2001, 2004 e 2007. GCC non supporta la versione non corretta.

Quindi la mia domanda è: è anche il caso di g ++ (nessun supporto dello standard non corretto)?

Le uniche 4 opzioni per selezionare un livello g ++ sono poi -std=c++98, -std=gnu++98, -std=c++0x e -std=gnu++0x. È corretto ?

E ultima sottocompleta: che cos'è l'opzione -ansi? È usato solo in modalità C?

Edit:

-ansi Un sinonimo di -STD = C89 (per C) o -std = C++ 98

+1

* perché * si desidera supportare lo standard non corretto? –

+0

Era una domanda per verificare se ho capito correttamente le relazioni tra C++ 98, C++ 03, ecc. E il documento gcc; non un "voglio". –

+0

Si noti che una parte significativa delle differenze tra il testo standard C++ 03 e il testo C++ 98 sono chiarificazioni di ambiguità e simili - cambiamenti scoperti quando i compilatori tentavano di implementare C++ 98. Lì, GCC non ha potuto ragionevolmente supportare C++ 98. – MSalters

risposta

9

gcc non supporta lo standard non corretto, punta a (anche se non raggiunge il 100%) la conformità C++ 03. Tecnicamente, c'è solo uno standard corrente di C++ e la versione che include TC1 è proprio questo. Come dice "supporta la maggior parte delle modifiche in C++ 03. Per selezionare questo standard ... usa una delle opzioni -ansi o -std=c++98".

Non vi è alcun supporto o opzione per selezionare la versione 1998 obsoleta non corretta dello standard.

+0

Qual è la differenza tra TC1 e TR1? –

+2

@ Martin: TC1 era fondamentalmente un bugfix di C++ 98 mentre TR1 era un report sulle possibili estensioni di libreria. Due cose completamente diverse. – sellibitze

3

Almeno per quanto ne so, nessuno , non c'è modo di "disattivare" il supporto per (uno di) le nuove funzionalità di C++ 03.

-ansi viene riconosciuto dal front-end C. Per ottenere ulteriori informazioni su quali componenti riconoscono quali interruttori, è possibile utilizzare g++ -v --help (questo produce molto output, quindi in genere si desidera eseguirne il pipe su less o qualcosa su tale ordine).