2010-02-11 29 views
5

Sospecho que algún código ASSERTION está teniendo efectos secundarios. Me gustaría desactivar ASSERT sin realizar ningún otro cambio en la compilación de mi código. Estoy usando MSVS2008. Cambiar de depuración a versión no funcionará ya que eso alterará la forma en que se inicializa la memoria.¿Cómo puedo desactivar ASSERT (x) en C++?

Respuesta

6

poner esto en la parte superior de sus archivos de cabecera después de que las inclusiones de cassert (o un incluyen que incluye cassert)

#undef assert 
#define assert(x) ((void)0) 

que redefine el marco afirman para que se expanda a nada.

+0

Si no me equivoco, eso desactiva la aserción (terminación del programa), pero no elimina y evita que la expresión sea evaluada. Quizás: '#define assert (x) (void) 0'? – UncleBens

+0

@UncleBens Ak, tienes razón, sin embargo, el '(nulo) 0' no es obligatorio. El '(x)' es sin embargo. – Yacoby

+2

@Yacoby: en general, lo quieres porque tener 'assert' expandirse a una declaración ayuda con las advertencias y demás. Por ejemplo, si 'assert 'se expande a nada en el modo de lanzamiento, entonces' if (foo) assert (bar); else assert (baz); 'podría advertir de cláusulas if y/o else vacías. El último borrador del estándar C, al menos, * requiere * que la declaración incorporada se implemente de esa manera. –

6

Si quiere decir assert, entonces eso debería controlarse con la macro NDEBUG.

+1

NDEBUG altera también la inicialización de la memoria – jbcoe

Cuestiones relacionadas