C 断言
C 断言
描述
C 标准库的 assert.h
头文件提供了一个名为 assert
的宏,它可用于验证程序做出的假设,并在假设为假时输出诊断消息。
定义
assert
的原型是一个宏,不是函数
1
2
#include <assert.h>
#define assert(expression) /* implementation-defined */
作用
assert
用于在 调试阶段 检查某个条件是否为真。如果表达式为假(即结果为 0),程序会:
- 打印出错误信息(包含表达式、文件名和行号)。
- 调用
abort()
终止程序。
如果表达式为真,程序继续运行,不会有任何影响。
使用示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <assert.h>
int divide(int a, int b) {
assert(b != 0); // 检查分母是否为零
return a / b;
}
int main() {
int x = 10, y = 2;
printf("%d / %d = %d\n", x, y, divide(x, y));
y = 0;
printf("%d / %d = %d\n", x, y, divide(x, y)); // 触发断言
return 0;
}
输出结果
1
2
10 / 2 = 5
Assertion failed: (b != 0), function divide, file test.c, line 6.
控制断言
如果在编译时定义了 NDEBUG 宏,那么所有的 assert
调用都会被禁用(相当于什么也不做)。 适用于 发布版(release),避免运行时检查带来的性能开销。
1
gcc -DNDEBUG main.c -o main
这样,assert(b != 0);
会被直接忽略。
本文由作者按照 CC BY 4.0 进行授权