3.9.3. La macro C assert()

En el fichero de cabecera estándar <cassert> aparece assert(), que es una macro de depuración. Cuando se utiliza assert(), se le debe dar un argumento que es una expresión que usted está «aseverando». 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 informando que la aserción falló. Este 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 original es 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().