文章

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 进行授权