0


C语言 assert()用法

目录

一、概述

  • assert 是一个宏,用于在运行时(当程序正在执行时)检查特定条件,在调试程序时非常有用。要使用它,你需要在程序中包含头文件“assert.h”。
  • assert 关键字用于将表达式作为函数参数执行,并在内存分配期间对其进行计算。因此,我们可以使用 malloc()方法来编写变量并计算。 - 如果表达式计算失败或者返回false,则表达式以及文件名和执行行将作为错误返回。- 如果计算失败或者返回false,应用程序将在执行 abort()时,assert() 会在标准错误 stderr 上显示错误消息,并中止程序执行。- 如果表达式成功且返回true,则会自动停用断言函数。

使用流程

Created with Raphaël 2.3.0 

 开始 

 assert(exp) 

 exp真假 

 继续执行✔ 

 错误❌程序 

 终止执行 

 yes 

 no 

二、声明

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

三、c语言中忽略assert()

  • 通过使用 GCC、C 和 C++ 编译器生成的代码,默认情况下启用断言。
  • assert 语句在编译程序时可能会产生意想不到的后果,如果我们不想使用 assert()函数,想从代码中删除所有断言,将会是一项非常耗时的任务。
  • 有一种更简单的方法可以在 C 编程语言执行期间从代码中删除所有断言语句。采用预处理器NDEBUG。GCC 编译器通过判断是否定义DNDEBUG 来决定是否禁用 assert()函数。
  • 在使用 NDEBUG 和语法时实现断言的代码如下:
#defineassert(_Expression)((void)0)

在这里插入图片描述

上面的代码是定义 assert()并传递名为 _Expression的参数以禁用程序中的断言操作的基本语法。

1.示例

定义NDEBUG宏时

#defineNDEBUG#include<assert.h>intmain(){int var=8;assert(var==1);system("pause");return0;}

输出:

请按任意键继续...

取消定义NDEBUG宏时

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

输出:

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

报错:
在这里插入图片描述

四、关键点

  • 断言的目的是使用和测试程序员的假设和其他操作。
  • 作为说明,我们可以使用断言来确定 malloc() 返回的指针是否为 NULL。
  • 根据断言,程序在执行期间的特定时间段满足某些要求。
  • 在执行时,如果表达式为false时,assert() 会在标准错误 stderr 上显示错误消息,并中止程序执行。
  • 程序员可以通过简单地重新编译程序来删除断言而无需修改源代码。

五、案例

1.实例1

例如:在程序中,我们除以两个整数,即计算 a/b(其中 a 和 b 是整数)b 不能为零,在程序中使用 assert(b != 0)。如果条件 (b != 0) 成立,则程序执行将继续。反之,它将终止,屏幕上会显示一条错误消息,指定文件名、行号、函数名称、不成立的条件。

#include<stdio.h>#include<assert.h>intmain(){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");return0;}

1.输入:

12

1.输出:

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

2.输入:

20

2.输出:

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

2.报错:
在这里插入图片描述

2.实例2

例如:在程序中,我们输入一个整数i,一个字符串arr,我们在程序中使用 assert(i>= 5)。
如果条件i>= 5成立,则程序执行将继续。
如果条件i>= 5不成立,它将终止,屏幕上会显示一条错误消息,指定文件名、行号、函数名称、不成立的条件。
如果条件arr!= NULL成立,则程序执行将继续。
如果条件arr!= NULL不成立,它将终止,屏幕上会显示一条错误消息,指定文件名、行号、函数名称、不成立的条件。

#include<assert.h>#include<stdio.h>intmain(){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.输入:

1

1.输出:

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

1.报错:
在这里插入图片描述

2.输入:

6
qaz

2.输出:

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

本文转载自: https://blog.csdn.net/qq_42815643/article/details/129164498
版权归原作者 你再期待什么? 所有, 如有侵权,请联系我们删除。

“C语言 assert()用法”的评论:

还没有评论