Macro de la biblioteca C -assert()

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

Descripción

Macro de la biblioteca Cvoid assert(int expression)Permite que la información de diagnóstico se escriba en el archivo de error estándar; en otras palabras, se puede utilizar para añadir diagnósticos en programas C.

assert()Es una macro de la biblioteca estándar de C, definida en<assert.h>el archivo de cabecera. Se utiliza para comprobar en tiempo de ejecución si una expresión es verdadera. Si la expresión es falsa,assert()la macro genera un mensaje de error y termina la ejecución del programa.

assert() es muy útil para la depuración y las pruebas.

assert()Es una herramienta poderosa que ayuda a los desarrolladores a verificar condiciones durante la ejecución del programa y a proporcionar información de error detallada cuando no se cumplen.

Declaración

La siguiente es la declaración de la macro assert():

#include <assert.h>
assert(expression);

Parámetros

  • expression-- Una expresión condicional que deseas comprobar; puede ser una variable o cualquier expresión de C. Siexpressiones TRUE, assert() no realiza ninguna acción. Siexpressiones FALSE, assert() mostrará un mensaje de error en el error estándar stderr y terminará la ejecución del programa.

Si el valor de expression es falso (0), assert() generará un mensaje de error que contiene la siguiente información:

  • Representación textual de la expresión que provocó el fallo de la aserción
  • Nombre del archivo fuente
  • Número de línea
  • Nombre de la función (si está disponible)

Luego el programa llama a la función abort() para terminar la ejecución.

Valor de retorno

Esta macro no devuelve ningún valor.

Ejemplo

El siguiente ejemplo demuestra el uso de la macro assert().

Ejemplo

#include <assert.h> #include <stdio.h> int main() { int a; char str[50]; printf("Introduce un valor entero:"); scanf("%d", &a); assert(a >= 10); printf("El entero introducido es: %d\n", a); printf("Introduce una cadena:"); scanf("%s", str); assert(str != NULL); printf("La cadena introducida es: %s\n", str); return(0); }

Compilemos y ejecutemos el programa anterior en modo interactivo, como se muestra a continuación:

请输入一个整数值: 11
输入的整数是: 11
请输入字符串: ejemplo 
输入的字符串是: ejemplo 

Deshabilitar aserciones

En versiones de lanzamiento, es posible que desees deshabilitar las aserciones para mejorar el rendimiento. Esto se puede lograr definiendo NDEBUG:

#define NDEBUG
#include <assert.h>

Una vez definido NDEBUG, todas las macros assert() se preprocesan como una sentencia vacía y no se realiza ninguna comprobación.

Recomendaciones de uso

  • Depuración: En las fases de desarrollo y depuración, el uso deassert()puede ayudarte a detectar errores lógicos de forma temprana.
  • Documentación: Medianteassert()se pueden expresar claramente las suposiciones y expectativas del programador sobre el código, lo cual es muy útil para el mantenimiento y la lectura del código.
  • Programación defensiva: Aunqueassert()no debe utilizarse para manejar errores de ejecución previsibles, es un medio eficaz para capturar errores de programación.

Consideraciones

  • Rendimiento: En código crítico para el rendimiento, las aserciones pueden añadir una sobrecarga adicional, por lo que suelen deshabilitarse en versiones de lanzamiento.
  • Manejo de errores:assert()No debe utilizarse para manejar situaciones de error esperadas, sino para capturar errores del programador.

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

Otras extensiones