目录
1. assert功能
2. 使用assert判指针有效性
3. assert的参数
4. NDEBUG宏与assert机制的关闭
5. Debug版本与Release版本
1. assert功能
assert ( ) 是assert.h头文件定义的宏,用于在运行时确保程序符合指定条件:
如果不符合(条件为假),就报错终止运行。
该宏常常被称为“断言”;
2. 使用assert判指针有效性
assert断言可用于判指针的有效性:
assert(p!=NULL)
当p!=NULL时,程序继续运行;
当p==NULL时,程序终止运行并给出报错信息;
3. assert的参数
assert ( ) 宏接收一个表达式作为参数,
如果该表达式为真,则返回值非零,assert()不会产生任何作用,程序继续运行;
如果该表达式为假,则返回值为零,assert ( ) 报错,在标准错误流stderr中写入一条错误信息,显示没有通过的表达式,以及包含这个表达式的文件名和行号:
#include<assert.h>
int main() {
int* p = NULL;
assert(p != NULL);
return 0;
}
4. NDEBUG宏与assert机制的关闭
assert可以实现无需更改代码就能开启或关闭assert的机制,
若已确认程序没有问题,无需再做断言,则在#include<assert.h>前定义一个宏NDEBUG即可;
重新编译程序,编译器就会禁用文件中所有的assert语句;
如果程序再度出现问题,移除#define NDEBUG重新编译使得assert语句重新启动即可;
代码示例1:assert正常开启:
#include<assert.h>
int main() {
int n = 0;
scanf("%d", &n);
assert(n > 3);
return 0;
}
代码示例2:assert关闭:
#define NDEBUG
#include<assert.h>
int main() {
int n = 0;
scanf("%d", &n);
assert(n > 3);
return 0;
}
5. Debug版本与Release版本
一般在Debug版本中使用assert,有利于程序员排查问题;
Release版本会直接优化掉assert,以保证用于使用程序的效率;
#include<assert.h>
int main() {
int n = 0;
scanf("%d", &n);
assert(n > 3);
return 0;
}
1、Debug版本:
2、Release版本: