Uso de aserción() del lenguaje C

I. Resumen

  • afirmar es una macro utilizada para verificar una determinada condición en tiempo de ejecución (mientras el programa se está ejecutando), muy útil al depurar un programa. Para usarlo, debe incluir el archivo de encabezado "assert.h" en su programa.
  • La palabra clave assert se usa para ejecutar expresiones como argumentos de funciones y evaluarlas durante la asignación de memoria. Por lo tanto, podemos usar el método malloc() para escribir variables y calcular.
    • Si la expresión no se evalúa o devuelve falso, la expresión junto con el nombre del archivo y la línea ejecutada se devolverán como un error.
    • Si el cálculo falla o devuelve falso, la aplicación abortará(), assert() mostrará un mensaje de error en stderr y abortará la ejecución del programa.
    • Si la expresión tiene éxito y devuelve verdadero, la función de afirmación se desactiva automáticamente.

manual

Created with Raphaël 2.3.0 开始 assert(exp) exp真假 继续执行✔ 错误❌程序 终止执行 yes no

2. Declaración

//表达式可以是任何有效的 C 语言表达式,很多时候它是一个条件。
void assert(int expression or variable);

3. Ignorar aserción() en lenguaje c

  • Las aserciones están habilitadas de forma predeterminada mediante el uso de código generado por los compiladores GCC, C y C++.
  • Las declaraciones de afirmación pueden tener consecuencias no deseadas al compilar un programa, y ​​sería una tarea que llevaría mucho tiempo eliminar todas las afirmaciones del código si no queremos usar la función de afirmación ().
  • Hay una manera más fácil de eliminar todas las afirmaciones del código durante la ejecución del lenguaje de programación C. Utilice el preprocesador NDEBUG. El compilador GCC decide si deshabilitar la función assert() al juzgar si DNDEBUG está definido.
  • El código para implementar la aserción cuando se usa NDEBUG y la sintaxis es el siguiente:
#define assert(_Expression) ((void)0)

inserte la descripción de la imagen aquí

El código anterior es la sintaxis básica para definir afirmar() y pasar un parámetro llamado _Expresión para deshabilitar la operación de afirmación en el programa.

1. Ejemplo

definiciónNDEBUGtiempo de macros

#define NDEBUG
# include <assert.h>
int main()
{
    
    
	int var= 8;
	assert (var==1);
	system("pause");
	return 0;
}

producción:

请按任意键继续. . .

indefinirNDEBUGtiempo de macros

//#define NDEBUG
# include <assert.h>
int main()
{
    
    
	int var = 8;
	assert(var == 1);
	system("pause");
	return 0;
}

producción:

Assertion failed: var == 1, file g:\file\vscode\c语言\c语言\c.c, line 6

Error:
inserte la descripción de la imagen aquí

4. Puntos clave

  • El propósito de las aserciones es usar y probar las suposiciones del programador y otras operaciones.
  • Como ilustración, podemos usar una aserción para determinar si el puntero devuelto por malloc() es NULL.
  • Según una afirmación, un programa satisface ciertos requisitos en un período de tiempo específico durante su ejecución.
  • Cuando se ejecuta, assert() imprime un mensaje de error en stderr y aborta la ejecución del programa si la expresión es falsa.
  • Los programadores pueden eliminar aserciones sin modificar el código fuente simplemente recompilando el programa.

5. Caso

1. Ejemplo 1

Por ejemplo: En el programa, dividimos dos números enteros, es decir, calculamos a/b (donde ayb son números enteros) b no puede ser cero, usa aseverar(b != 0) en el programa. Si la condición (b != 0) se cumple, la ejecución del programa continuará. De lo contrario, terminará y aparecerá un mensaje de error en la pantalla, especificando el nombre del archivo, el número de línea, el nombre de la función y la condición que no se cumple.

#include <stdio.h>
#include <assert.h>
int main() 
{
    
    
  int a, b;
 
  printf("Input two integers to divide\n");
  scanf("%d%d", &a, &b);
  assert(b != 0);
  printf("%d/%d = %.2f\n", a, b, a/(float)b);
  system("pause");
  return 0;
}

1. Introduzca:

1 2

1. Salida:

Input two integers to divide
1 2
1/2 = 0.50
请按任意键继续. . .

2. Introduzca:

2 0

2. Salida:

Input two integers to divide
2 0
Assertion failed: b != 0, file g:\file\vscode\c语言\c语言\c.c, line 9

2. Informe de errores:
inserte la descripción de la imagen aquí

2. Ejemplo 2

Por ejemplo: en el programa, ingresamos un entero i, una cadena arr, usamos asertar (i>= 5) en el programa.
Si la condición i>= 5 se cumple, la ejecución del programa continuará.
Si la condición i >= 5 no se cumple, terminará y aparecerá un mensaje de error en la pantalla, especificando el nombre del archivo, el número de línea, el nombre de la función y la condición falsa.
Si la condición arr != NULL se mantiene, la ejecución del programa continuará.
Si la condición arr != NULL no es verdadera, terminará y aparecerá un mensaje de error en la pantalla, especificando el nombre del archivo, el número de línea, el nombre de la función y la condición falsa.

#include <assert.h>
#include <stdio.h>
int main()
{
    
    
   int i;
   char arr[100];
   printf("Please enter an integer value: ");
   scanf("%d", &i);
   assert(i>= 5);//断言i>=5这个条件
   printf("The input integer is: %d\n", i);
   printf("Please enter a string: ");
   scanf("%s", arr);
   assert(arr!= NULL);
   printf("The input string is: %s\n", arr);
   system("pause");
   return(0);
}

1. Introduzca:

 1

1. Salida:

Please enter an integer value: 1
Assertion failed: i >= 5, file g:\file\vscode\c语言\c语言\c.c, line 10

1. Informe de errores:
inserte la descripción de la imagen aquí

2. Introduzca:


6
qaz

2. Salida:

Please enter an integer value: 6
The input integer is: 6
Please enter a string: qaz
The input string is: qaz
请按任意键继续. . .

Supongo que te gusta

Origin blog.csdn.net/qq_42815643/article/details/129164498
Recomendado
Clasificación