2009-05-20 26 views

Respuesta

16

Define la expresión assert (cualquier cosa) para no hacer nada.

Presumiblemente, el entorno que se utiliza no es compatible con la declaración ANSI C assert, o el programador no tenía conocimiento de que se podría desactivar definiendo NDEBUG.

+6

O el código estaba en assert.h –

8

Para ampliar lo bdonlan dice, la razón por la macro no se expande vacía es porque si lo hiciera, entonces algo así como:

assert(something) // oops, missed the semi-colon 
assert(another_thing); 

compile en modo de lanzamiento, pero no en el modo de depuración. La razón por la cual es ((void) 0) en vez de solo 0 es para evitar advertencias de "declaración sin efecto" (o lo que MSVC las llame).

0

Sólo para añadir, esta es la definición de afirman en newlib también, cuando NDEBUG se define como una directiva de preprocesador. Newlib es la biblioteca C de código abierto que se utiliza en Cygwin y sistemas integrados.

Desde el manual deaserción en newlib:

La macro se define para permitir que para desactivar todos los usos de afirman en tiempo de compilación definiendo NDEBUG como una variable de preprocesador. Si hace esto, el afirman macro se expande a (void(0))

Cuestiones relacionadas