C语言 assert()用法

这篇具有很好参考价值的文章主要介绍了C语言 assert()用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

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

使用流程

二、声明

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

三、c语言中忽略assert()

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

assert,C语言,vscode

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

1.示例

定义NDEBUG宏时

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

输出:

请按任意键继续. . .

取消定义NDEBUG宏时

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

输出:

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

报错:
assert,C语言,vscode

四、关键点

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

五、案例

1.实例1

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

#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.输入:

1 2

1.输出:

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

2.输入:

2 0

2.输出:

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

2.报错:
assert,C语言,vscode

2.实例2

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

#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.输入:

 1

1.输出:

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

1.报错:
assert,C语言,vscode

2.输入:


6
qaz

2.输出:文章来源地址https://www.toymoban.com/news/detail-745273.html

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

到了这里,关于C语言 assert()用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Visual Studio】报错 ASSERT: “i >= 0 && i < size()“,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在调试动态绘图

    2024年02月11日
    浏览(55)
  • vscode+opencv基础用法学习1

    案例1:读取图片信息 如果是使用云服务器的话,由于图形界面的问题,使用cv::show来显示图片会报错 注: #include \\\"opencv2/opencv.hpp\\\"的时候在vscode里面会显示没有这个头文件,导致运行不了。 解决方案: 方法1.鼠标放到红色波浪线位置,会有一个快速修复,点开之后将OpenCV的路

    2024年01月22日
    浏览(31)
  • 记录 | vscode launch.json和task.json的用途用法

    Tasks.json 按编译逻辑来说,先讲tasks.json 先贴图: \\\"label\\\": 对应launch.json中的 \\\"preLaunchTask\\\";(一定要一致,决定了launch.json之前先运行哪个配置,tasks是一个array类型,里面理论来说可以存多个配置) \\\"command\\\": 这个是编译器的命令,相当于选择了哪个编译器 (我配置了环境变量

    2024年01月25日
    浏览(45)
  • vscode连接sql数据库插件SQLTools Microsoft SQL Server用法

    vscode下载扩展插件:SQLTools Microsoft SQL Server 下载后选择add new connection 按需配置后点击最下面save connection按钮再点connect now按钮  然后会出现一个sql文件,在这个文件里面编写查询语句等再点run on active connection就会弹出一个右侧窗口可以看数据了  

    2024年02月12日
    浏览(65)
  • C语言----C语言中sizeof的用法

    sizeof是计算变量在内存的占空间的大小,单位是字节 (1)使用sizeof查看数据类型占空间大小 如下,可以查看C语言中各种基本数据类型的占用空间的大小 执行结果如下: (2)使用sizeof计算基本数据类型变量的占用空间的大小 如下,可以对基本数据类型的变量计算占用空间

    2024年02月06日
    浏览(42)
  • 【C语言%的多种用法】

    前言: 众所周知:%百分号,在九年义务教育中,表示分数的分母是100的分数之比。即:百分比,如:99%,等价于小数表示为:0.99 那么在我们C语言中%号又有那些值得学习的用途呢? 1.%取余运算符 2.%作格式符使用 3.%搭配*号的作用 4.%搭配#号的作用 (1)C语言中%最常见的就是

    2024年02月05日
    浏览(35)
  • C语言指针用法梳理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 常见转换说明 %A 浮点数、十六进dao制数字和p-记法(C99) %c 一个字符 %d 有符号十进制整数 %e 浮点数、e-记数法 %E 浮点数、E-记

    2024年01月16日
    浏览(39)
  • 【C语言】C语言中EOF的具体用法

    前言 在C语言中存在EOF EOF是一个 整数类型 的宏定义,扩展为负数常量表达式(通常为-1)。它被头文件中的好几个函数作为返回值使用,来表明已经到达文件尾或者示意一些其他的错误条件。它也被作为一个值来表示无效的字符。 这样的概念比较难理解,我们用代码

    2024年02月08日
    浏览(42)
  • C语言笔记 - “%”符号的用法

    %表示取模运算,也就是取余数。 例如 6 % 4 = 2 引导符用于控制输入输出的格式。常见于printf(\\\"%d\\\",a);scanf(\\\"%d\\\",a);语句。 %s-字符串(String) %c-字符(Char) %d-十进制有符号型输出(Decimal) ① %6d 整数输出,宽度是6位,不足左边补空格 ② %06d 整数输出,宽度是6位,不足左边补数字0 ③ %

    2024年02月12日
    浏览(33)
  • C语言数组介绍和用法

    本篇文章将带大家学习C语言中的数组,数组在C语言中是一个比较重要的点,大家需要好好理解并多加使用练习。 在 C 语言中,数组是一组同类型的元素的集合。数组中的每个元素都可以通过它的下标访问,并且下标是从0开始的整数值。举个例子,下面是一个包含5个整数的

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包