mundo lista juegos hola funciones fuente ejemplos codigos codigo cabecera basicos archivos c++ preprocessor-directive compiler-version

lista - codigos de c++ y sus funciones



¿Cómo se define la directiva__cplusplus en varios compiladores? (3)

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?


199711L significa 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 estándar de 2003, hubo pocos cambios suficientes que el comité (aparentemente) decidió dejar ese valor sin cambios.

Para la norma 2011, se debe definir como 201103L, (nuevamente, año = 2011, mes = 03) nuevamente, lo que significa que el comité aprobó la norma como finalizada en marzo de 2011.

Para el estándar 2014, se debe definir como 201402L, interpretado de la misma manera que anteriormente (febrero de 2014).

Para el estándar 2017, se debe definir como 201703L (marzo de 2017).

Antes de que se aprobara el estándar original, muchos compiladores normalmente lo definían como 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 como 1 .

Casi me olvido de mencionar, pero un dato más acerca de los compiladores antiguos: algunas de las versiones más antiguas de cfront (y probablemente algunas otras que lo copian) definieron c_plusplus lugar de __cplusplus . Sin embargo, no recuerdo que se haya definido en ningún valor significativo.


Creo que el preprocesador define para las diversas versiones que debería ir en SD-6:

#define __cpp_1997 199711L #define __cpp_2003 __cpp_1997 #define __cpp_2011 201103L #define __cpp_2014 201402L #define __cpp_2017 201703L

Mirando hacia el 2020 podríamos tener tres estándares más. No dudo que muchos implementadores tendrán estándares de apoyo de código a partir de 1997.

Por mi parte, me gustaría una definición mnemotécnica para no tener que volver a esta publicación.


Eso significa que es compatible con el estándar C ++ de 1997 (en realidad conocido como C ++ ''98, ya que demoraron demasiado en ratificarlo).