做网站做域名,旅游门户网站建设意义,淘宝u站怎么做网站的,网站方案案例怎么做目录 一、断言的概念二、assert断言2.1 代码12.1.1运行结果2.1.2分析 2.2代码22.2.1运行结果2.2.2分析2.3代码32.3.1运行结果及其分析 三、优点四、缺点五、注意 一、断言的概念
assert.h 头⽂件定义了宏 assert() #xff0c;用于在运行时确保程序符合指定条件#xff0c;如… 目录 一、断言的概念二、assert断言2.1 代码12.1.1运行结果2.1.2分析 2.2代码22.2.1运行结果2.2.2分析2.3代码32.3.1运行结果及其分析 三、优点四、缺点五、注意 一、断言的概念
assert.h 头⽂件定义了宏 assert() 用于在运行时确保程序符合指定条件如果不符合就报错终止运行。这个宏常常被称为“断言”。
二、assert断言
assert(p ! NULL);上面代码在程序运行到这一行语句时验证变量 p 是否等于 NULL 。如果确实不等于 NULL 程序继续运行否则就会终止运行并且给出报错信息提升。assert() 宏接受⼀个表达式作为参数。如果该表达式为真返回值非零assert() 不会产⽣任何作用程序继续运行。如果该表达式为假返回值为零 assert() 就会报错在标准错误流 stderr 中写⼊⼀条错误信息显示没有通过的表达式以及包含这个表达式的文件名和行号。
2.1 代码1
#includestdio.h
int main()
{int* p NULL;assert(p ! NULL);return 0;
}2.1.1运行结果 这里显示assert未定义需要包含头文件
#includeassert.h完整代码
#includestdio.h
#includeassert.h
int main()
{int* p NULL;assert(p ! NULL);return 0;
}再次运行运行结果
2.1.2分析 报错会告诉你在哪一行。
2.2代码2
#includestdio.h
#includeassert.h
int main()
{int a 10;int* p a;assert(p ! NULL);printf(%d, *p);return 0;
}2.2.1运行结果 2.2.2分析
assert不等于 NULL 程序继续运行结果没有报错。
2.3代码3
#includestdio.h
#includeassert.h
int main()
{int a 0;scanf(%d, a);assert(a10);printf(%d, a);return 0;
}2.3.1运行结果及其分析 三、优点
assert() 的使用对程序员是非常友好的使用 assert() 有几个好处它不仅能⾃动标识文件和出问题的行号还有⼀种⽆需更改代码就能开启或关闭 assert() 的机制。如果已经确认程序没有问题不需要再做断言就在 #include assert.h 语句的前面定义⼀个宏 NDEBUG 。
#define NDEBUG
#include assert.h然后重新编译程序编译器就会禁用文件中所有的 assert() 语句。如果程序⼜出现问题可以移除这条 #define NDBUG 指令或者把它注释掉再次编译这样就重新启用了 assert() 语句。 代码
#includestdio.h
#define NDEBUG
#includeassert.h
int main()
{int a 0;scanf(%d, a);assert(a10);printf(%d, a);return 0;
}运行结果及其分析
四、缺点
因为引⼊了额外的检查增加了程序的运行的时间。
五、注意
一般我们可以在 Debug 中使用在 Release 版本中选择禁用 assert 就行在 VS 这样的集成开发环境中在 Release 版本中直接就是优化掉了。这样在debug版本写有利于程序员排查问题在 Release 版本不影响用户使用时程序的效率。