Mi compilador lo expande a 199711L. Qué significa eso? Leí que __cplusplus> 199711L significa C++ 11. ¿Cuáles son las posibles expansiones de esta macro y qué significa?¿Cómo se define la directiva __cplusplus en varios compiladores?
Respuesta
El 199711L representa Año = 1997, Mes = 11 (es decir, Noviembre de 1997) - la fecha en que el comité aprobó la norma que el resto de la ISO aprobó a principios de 1998.
Para el 2003 estándar, hubo pocos cambios suficientes que el comité (al parecer) decidió dejar ese valor sin cambios.
Para el estándar de 2011, que se requiere para ser definido como 201103L, (de nuevo, año = 2011, mes = 03) de nuevo lo que significa que el comité aprobó la norma como fue aprobado en marzo del 2011.
Para el 2014 estándar, se requiere que se defina como 201402L, interpretado de la misma manera que en el anterior (febrero de 2014).
Para la norma 2017, se debe definir como 201703L (marzo de 2017).
Antes de que se aprobara el estándar original, bastantes compiladores normalmente lo definían en 0
(o simplemente una definición vacía como #define __cplusplus
) para indicar "no conforme". Cuando se les pidió su conformidad más estricta, muchos lo definieron en 1
.
Casi olvidé mencionar, pero un tidbit más sobre compiladores antiguos: algunas de las primeras versiones de cfront (y probablemente algunos otros que la copian) definieron c_plusplus
en lugar de __cplusplus
. Sin embargo, no recuerdo que se esté definiendo con ningún valor significativo.
Eso significa que es compatible con el estándar 1997, C++ (en realidad, conocido como C++ '98, ya que tomó demasiado tiempo para ratificarlo ..
- 1. ¿Cuál es el propósito de la directiva #define en C++?
- 2. define varios idiomas en html
- 3. Portabilidad de la directiva de preprocesador #warning
- 4. ¿Cómo se define la función en .emacs?
- 5. Gnu C++ macro __cplusplus estándar conformes?
- 6. directiva Objective-C#define demonized for String constants
- 7. ¿Cómo se define threadsafe?
- 8. ¿Cómo se usa #define?
- 9. ¿Cómo se define (?) Internamente?
- 10. Portabilidad de pthreads-win32 sobre varios compiladores de ventanas
- 11. ¿Cómo se define correctamente PRINT_NOTIFY_INFO_DATA?
- 12. ¿Cómo se define un pedido en Scala?
- 13. ¿Cómo se usa la directiva Apache "ScriptInterpreterSource Registry-Strict"?
- 14. ¿Cómo se define ESC char en git?
- 15. ¿Cómo se define una @interface en Scala?
- 16. La función no se define en setInterval
- 17. ¿Cómo se define enum en as3?
- 18. ¿Cómo se define una definición en C?
- 19. ¿Cómo se define un alias en la concha de pescado?
- 20. ¿Cómo se define el contenido del mapa en la inicialización?
- 21. ¿Cómo se define la constante en el constructor de clase?
- 22. ¿Cómo se define la unidad de compilación en C++?
- 23. ¿Cómo se implementan las clases en los compiladores
- 24. C#: ¿En qué ensamblado se define SHDocVw.WebBrowser_V1?
- 25. $ excepción se define en "locales"
- 26. Análisis semántico en compiladores
- 27. ¿Cómo se define la acción con la forma simple?
- 28. ¿Cómo se especifica una directiva de preprocesador en eclipse?
- 29. ¿Cómo funciona la directiva .NET IL .maxstack?
- 30. GNU como ampliación de la directiva .macro
2003 fue un "revisión técnica", no es realmente un estándar. Se acaba de presentar el material "TR3" que nunca fue parte del estándar. –
@MichaelJ: ["ISO/IEC JTC1/SC22/WG21 ha producido el estándar ISO/IEC 14882: 2003 en el lenguaje de programación C++. Fue publicado el 2003-10- 16. "] (http://www.open-std.org/jtc1/sc22/WG21/docs/standards). Tenga en cuenta que este es el resultado de un TC (corrigendum técnico) no un TR (informe técnico). TR es un documento separado, no una revisión de la norma. –
No dije que era un TR, dije que presentó el material TR3, y lo hizo. El documento publicado en 2003 fue el de 1998. andard más la CA. No era un nuevo estándar de C++ y el estándar de 1998 no se modificó de ninguna manera. –