una que paso para macro hacer grabar grabacion ejemplos detener crear como c++ c cross-platform c-preprocessor ndebug

c++ - que - macros para excel



¿Para qué se utiliza la macro del preprocesador NDEBUG(en diferentes plataformas)? (2)

Esa es una decisión de los mantenedores del marco en cuestión. Dado que tales decisiones están sujetas a cambios, no es nada en lo que debe confiar . Yo uso NDEBUG como un alternador para todo lo relacionado con la depuración (por ejemplo, salidas de rastreo), pero podría cambiar de opinión en la próxima versión. Ninguna respuesta que alguien pueda dar aquí es un reemplazo para verificar la documentación API de los marcos que usa en un proyecto dado.

Dicho esto, usar NDEBUG en los encabezados de bibliotecas / marcos, para cualquier otra cosa que no sea assert() , sería una decisión de diseño bastante tonta. El programador de aplicaciones tiene permiso explícito para establecer / desarmar NDEBUG como le parezca, antes y / o después de incluir los encabezados de cualquier biblioteca o marco, por lo que el mantenedor de lib / framework no puede confiar en que NDEBUG esté configurado para un lanzamiento lib o no configurado para una depuración lib. Dudo que ningún proyecto significativo se hubiera basado en NDEBUG de esa manera.

Me interesa el propósito que varias plataformas / compiladores ("implementaciones") / frameworks asignan a la macro NDEBUG preprocesador de C y C ++.

Tanto el C como el estándar C ++ solo mencionan esta definición una vez, a saber, para controlar el comportamiento de la macro assert() .

Pediría que se incluyeran solo respuestas específicas, donde se sabe que cierta plataforma / framework / biblioteca para C o C ++ usa la definición de NDEBUG para habilitar o deshabilitar cualquier otra cosa además de la macro assert() estándar definida .

Una razón para hacer esta pregunta ha sido que MS (Visual-C ++) siempre (?) Usa "their" _DEBUG define para distinguir entre depuración y publicación y me preguntaba si esta es una práctica común para que una biblioteca / plataforma tenga su la depuración "propia" define o si otras bibliotecas / plataformas usan NDEBUG para sus cosas relacionadas con la depuración.


Lo único ''estándar'' sobre NDEBUG es que se usa para controlar si la macro assert se expandirá en algo que realice o no un chequeo. MSVC define esta macro de manera útil en las configuraciones de compilación de lanzamiento definiéndola en el proyecto por usted. Puede cambiarlo manualmente editando la configuración del proyecto. Otras cadenas de herramientas podrían (o no) hacer algo similar.

Tenga en cuenta que también puede cambiar el estado de la macro NDEBUG dentro de una unidad de traducción (archivo fuente) usando #define y / o #undef en NDEBUG y volver a incluir assert.h para cambiar la forma en que se comporta la macro assert (enciéndalo y desactívelo) ) Ese comportamiento es obligatorio según el estándar, y es el único momento (creo) en el que el estándar permite incluir un encabezado estándar por segunda vez para cambiar el comportamiento de la compilación después de la segunda inclusión.