Home C&C++函数库 c++ 语法 程序源码 Linux C库

assert

宏   <cassert>

void assert (int expression);

评估断言

如果这个具有函数形式的宏的参数expression比较结果等于零(即表达式为false), 则将一条消息写入标准错误设备并调用abort,终止程序执行。
显示的消息的细节取决于特定的库实现,但它至少应该包括:断言失败的表达式、 源文件的名称和发生断言的行号。常用的表达式格式为:

Assertion failed: expression, file filename, line line number

如果在包含<assert.h>时,已经定义了名为NDEBUG的宏,则该宏将被禁用。 这是为了编码器在调试程序时,在源代码中包含尽可能多的assert调用, 然后通过简单地包括如下一行代码来禁用所有的assert调用:

#define NDEBUG

在代码的开头,包含<assert.h>之前。
因此,这个宏被设计用来捕获编程错误,而不是用户或运行时错误, 所以它通常在程序退出调试阶段后被禁用。

C诊断库 assert.h 定义一个可以用作标准调试工具的宏函数:

☲  参数


expression

要计算的表达式。如果该表达式的计算结果为0,则会导致断言失败,从而终止程序。

☉  返回值





☣  示例



/* assert 示例*/
#include <stdio.h>
#include <assert.h>

void print_number(int* myInt)
{
	assert(myInt != NULL);
	printf("%d \n", *myInt);
}

int main()
{
	int a = 10;
	int* b = NULL, * c = NULL;

	b = &a;

	print_number(b);
	print_number(c);

	return 0;
}

在本例中,如果print_number被一个空指针作为属性调用, 则使用assert终止程序执行。这发生在对函数的第二次调用时,这会触发一个断言失败来提示错误。
vs 2019 输出:
10
Assertion failed: myInt != NULL, file E:\c++\demo01\demo2.cpp, line 7

联系我们 免责声明 关于CandCplus 网站地图