cómo deshabilitar por completo la aserción

Tengo mi código lleno de llamadas para assert(condition) . En la versión de depuración utilizo g++ -g explotando mi afirmación. Con sorpresa, puedo ver que la afirmación funciona también en mi versión de lanzamiento, la que se comstack sin la opción -g .

¿Cómo puedo desactivar por completo en tiempo de comstackción mi afirmación? ¿Debería definir explícitamente NDEBUG en cualquier comstackción que produzca a pesar de que estén NDEBUG o lo que sea alguna otra?

Debe #define NDEBUG (o usar el flag -DNDEBUG con g ++ ) esto deshabilitará assert mientras esté definido antes de la inclusión del archivo de encabezado assert.

Utilice #define NDEBUG

7.2 Diagnóstico

1 El encabezado define la macro assert y se refiere a otra macro,

NDEBUG

que no está definido por . Si NDEBUG se define como un nombre de macro en el punto en el archivo fuente donde se incluye, la macro assert se define simplemente como

#define assert(ignore) ((void)0)

La macro assert se redefine de acuerdo con el estado actual de NDEBUG cada vez que se incluye .

Puedes inhabilitar las aserciones completamente

 #define NDEBUG #include  

o puede establecer NDEBUG (a través de -DNDEBUG) en su procedimiento makefile / build dependiendo de si desea una versión productiva o dev.

El indicador -g no afecta la operación de assert , solo asegura que varios símbolos de depuración estén disponibles.

Establecer NDEBUG es la forma estándar (como en el estándar oficial, ISO) de deshabilitar las aserciones.

Sí, defina NDEBUG en la línea de comando / sistema de comstackción con la opción preprocesador / comstackdor -DNDEBUG .

Esto no tiene nada que ver con la información de depuración insertada por -g .