3.9.3. La macro C assert()

En el fichero de cabecera estándar <cassert> aparece assert(), que es una útil macro de depuración. Cuando se utiliza assert(), se le debe dar un argumento que es una expresión que usted «asevera que es cierta». El preprocesador genera código que comprueba la aserción. Si la aserción no es cierta, el programa parará después de imprimir un mensaje de error que indica cuál era la aserción y que ha fallado. Éste es un ejemplo trivial:

//: C03:Assert.cpp
// Use of the assert() debugging macro
#include <cassert>  // Contains the macro
using namespace std;

int main() {
  int i = 100;
  assert(i != 100); // Fails
} ///:~

Listado 3.64. C03/Assert.cpp


La macro proviene de C Estándar, así que está disponible también en el fichero de cabecera assert.h.

Cuando haya terminado la depuración, puede eliminar el código generado por la macro escribiendo la siguiente línea:

#define NDEBUG

en el programa, antes de la inclusión de <cassert>, o definiendo NDEBUG en la línea de comandos del compilador. NDEBUG es una bandera que se usa en <cassert> para cambiar el código generado por las macros.

Más adelante en este libro, verá algunas alternativas más sofisticadas a assert().