2010-08-29 19 views
9

Estoy un poco confundido al leer esto: Gcc 4.5 online manual --- Standards section.compatibilidad con normas g ++

Se explican esta

El original ISO C++ estándar se publicó como el estándar ISO (ISO/IEC 14882: 1998) y modificado por un Corrigenda técnico publicado en 2003 (ISO/IEC 14882: 2003). Estos estándares se conocen como C++ 98 y C++ 03, respectivamente. GCC implementa la mayoría de C++ 98 (la exportación es una excepción notable) y la mayoría de los cambios en C++ 03.

Pero no dicen si gcc admite el 'desnudo' 98 C++ o solo el corregido C++ 03. En la sección 'lenguaje C' es la explicación más clara:

Los errores en la norma ISO 1999 C se corrigieron en tres Corrección de errores técnicos publicados en 2001, 2004 y 2007. GCC no es compatible con la versión sin corregir.

Así que mi pregunta es: ¿es también el caso de g ++ (no es compatible con el estándar no corregido)?

Los únicos 4 opciones para seleccionar un g ++ estándar son entonces -std=c++98, -std=gnu++98, -std=c++0x, y -std=gnu++0x. Es eso correcto ?

Y la última subestación: ¿Cuál es la opción -ansi, entonces? ¿Solo se usa en modo C?

Editar:

-ansi Un sinónimo de -std = c89 (para C) o -std = C++ 98

+1

* ¿por qué * le gustaría apoyar el estándar no corregido? –

+0

Fue una pregunta para comprobar si entendía correctamente las relaciones entre C++ 98, C++ 03, etc. y el documento gcc; no es un "quiero" –

+0

Tenga en cuenta que una parte importante de las diferencias entre el texto estándar de C++ 03 y el texto de C++ 98 son aclaraciones de ambigüedades y similares: cambios descubiertos cuando los compiladores intentaron implementar C++ 98. Allí, GCC no podía soportar razonablemente C++ 98. – MSalters

Respuesta

9

gcc no es compatible con el estándar no corregido, tiene como objetivo (aunque no llega al 100%) la conformidad C++ 03. Técnicamente, solo hay un estándar actual de C++ y la versión que incluye TC1 lo es. Como dice "admite la mayoría de los cambios en C++ 03. Para seleccionar este estándar ... use una de las opciones -ansi o -std=c++98".

No hay soporte u opción para seleccionar la versión obsoleta 1998 no corregida de la norma.

+0

¿Cuál es la diferencia entre TC1 y TR1? –

+2

@Martin: TC1 era básicamente una corrección de errores de C++ 98, mientras que TR1 era un informe sobre posibles extensiones de biblioteca. Dos cosas completamente diferentes. – sellibitze

3

Al menos en lo que sé, no , no hay forma de "desactivar" el soporte para (cualquiera de) las nuevas características de C++ 03.

-ansi es reconocido por C front end. Para obtener más información acerca de qué componentes reconocen qué conmutadores, puede usar g++ -v --help (esto produce una gran cantidad de salida, por lo que generalmente desea canalizarlo a less o algo así).