Biblioteca estándar de C -<assert.h>

Introducción

de la biblioteca estándar de Cassert.hel archivo de encabezado `<assert.h>` proporciona una macro llamada `assert`assertque se puede utilizar para verificar las suposiciones hechas por el programa y, si la suposición es falsa, emitir un mensaje de diagnóstico.

La biblioteca estándar `assert.h` se utiliza principalmente para realizar aserciones durante la ejecución del programa. La aserción es un medio para probar suposiciones; generalmente se usa en la etapa de depuración, para detectar inmediatamente problemas cuando el programa presenta un estado inesperado.

<assert.h>El mecanismo de aserción proporcionado es una herramienta útil en el lenguaje C que ayuda a los desarrolladores a encontrar y corregir errores en una etapa temprana.

La macro definidaassertapunta a otra macroNDEBUG, la macroNDEBUG`NDEBUG` no es parte de <assert.h>. Si se ha definido `NDEBUG` como nombre de macro en el archivo fuente que referencia a <assert.h>, entoncesassertla macro `assert` se define de la siguiente manera:

assert(expression)

La macro `assert` se utiliza para probar si la expresión `expression` es verdadera. Si `expression` es falsa (es decir, vale 0), `assert` muestra un mensaje de error y termina la ejecución del programa. Este mensaje de error incluye lo siguiente:

  • La expresión que provocó el fallo de la aserción
  • El nombre del archivo fuente
  • El número de línea

En la versión de lanzamiento, se pueden deshabilitar todas las aserciones `assert` definiendo `NDEBUG`. Por ejemplo:

#define NDEBUG
#include <assert.h>

Una vez definido `NDEBUG`, la macro `assert` se preprocesará como una declaración vacía, sin ningún costo en tiempo de ejecución.

A continuación se muestra un ejemplo sencillo que demuestra el uso básico de `assert`:

Ejemplo

#include <stdio.h>
#include <assert.h>

void test_positive(int x) {
    assert(x > 0);
}

int main() {
    int a = 5;
    int b = -3;

    test_positive(a); // esta aserción se cumple
    test_positive(b); // esta aserción falla, el programa termina

    printf("This line will not be executed if an assertion fails.\n");

    return 0;
}

En el ejemplo anterior, al llamar a `test_positive(b)`, como `b` es un número negativo, la aserción `x > 0` fallará. El programa mostrará un mensaje similar al siguiente y terminará:

Assertion failed: (x > 0), file example.c, line 6

Función de las aserciones

  • Depuración: en la etapa de desarrollo, las aserciones permiten detectar rápidamente errores lógicos o situaciones donde las suposiciones no se cumplen.
  • Documentación: las aserciones pueden servir como parte de la documentación, describiendo las condiciones previas y posteriores de las funciones.
  • Programación defensiva: aunque no se recomienda utilizar aserciones para la comprobación de parámetros en código de producción, en algunos casos pueden actuar como la última línea de defensa.

Consideraciones

  • Rendimiento: en código sensible al rendimiento, las aserciones pueden añadir una sobrecarga adicional, especialmente cuando se realizan muchas llamadas. Por lo tanto, normalmente se deshabilitan en las versiones de lanzamiento.
  • Manejo de errores: las aserciones no deben usarse para manejar condiciones de error predecibles y recuperables. Las aserciones se usan más para detectar errores del programador.

Macro de la biblioteca

A continuación se enumera la única función definida en el archivo de encabezado `assert.h`:

N.ºFunción y descripción
1void assert(int expression)
En realidad es una macro, no una función, que se puede utilizar para añadir diagnósticos en programas C.
Otras extensiones