位置:首页 > C > C语言assert断言用法:条件不满足时报错处理

C语言assert断言用法:条件不满足时报错处理

时间:2026-08-21  |  作者:游戏探长  |  阅读:0

简介

assert() 是包含在 assert.h 头文件的宏,用于在运行时确保程序符合指定的条件。

如果不符合条件,就报错并终止运行。这个宏被称为“断言”。

例子:

assert(a > b);

这行代码的作用是:如果程序运行到这里时,不满足 a>b 这个条件,程序就会报错并停止运行。

assert()宏的参数是一个表达式。

  • 当这个表达式为真(返回值不为零)时,assert()毫无作用,程序照常运行;

  • 当表达式为假(返回值为零)时,assert()就会报错,在标准错误流stderr中输出一条错误信息。

  • 错误信息包括未通过的表达式,以及包含该表达式的文件名和行号。

如何使用

assert的常见使用场景,有判断变量值、判断指针是否为空指针等。

接下来我们以判断一个指针是否为空指针为例:

#include
#include
int main()
{
	int* p = NULL;
	assert(p != NULL);
	printf("ok");
	return 0;
}

这个程序运行到assert()时,会判断变量p是否等于NULL。

  • 如果变量p不等于NULL,程序继续运行;

  • 如果变量p等于NULL,程序就会终止运行,并给出报错信息提示。

关闭 assert 的方法

assert()的使用可太友好了!

在一些大型、复杂的程序里,程序员可能会在很多地方用到assert功能。

但等bug修复完后,assert在程序里就不再需要了。

这时候,如果再去代码里一个一个找出来删掉,会非常麻烦。

好在C语言里有一个办法,就是在 #include 之前定义一个宏:#define NDEBUG

这样代码里的assert代码就不会再执行了。

比如,下面这段代码就不会报错:

#define NDEBUG
#include
#include
int main()
{
	int* p = NULL;
	assert(p != NULL);
	printf("ok");
	return 0;
}

重新启用 assert

当你重新需要使用程序里的assert功能时,将定义注释掉即可重新启用assert功能。

这样在debug版本写有利于程序员排查问题,在Release版本不影响用户使用时程序的效率。

Tip:在vs的集成开发环境中,Release版本的代码会将assert自动优化掉

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多