C++ 断言
C++ 断言
assert
是一个运行时调试宏,定义在头文件<cassert>
中
在C语言中则定义在
<assert.h>
基本作用
assert(expr)
会检查expr
是否为真
- 如果
expr == true
,那么什么都不会发生,程序继续执行 - 如果
expr == false
,那么程序会打印错误信息,并调用abort()
来终止程序
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cassert>
#include <iostream>
using namespace std;
int divide(int a, int b) {
assert(b != 0); // 确保分母不为 0
return a / b;
}
int main() {
cout << divide(10, 2) << endl; // 正常
cout << divide(10, 0) << endl; // 触发 assert
}
运行时检测到b == 0
,那么会输出报错
1
Assertion failed: (b != 0), file main.cpp, line 6
NDEBUG
assert
在Debug模式下有效,在Release模式下通常会禁用
如果在编译时定义了宏NDEBUG
1
2
#define NDEBUG
#include <cassert>
那么所有的assert
语句都会被替换成空语句,并且没有运行时的开销
本文由作者按照 CC BY 4.0 进行授权