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 <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 |
|---|---|
| 1 | void assert(int expression) En realidad es una macro, no una función, que se puede utilizar para añadir diagnósticos en programas C. |