assert()是C标准库调试宏,仅用于开发阶段检查前置假设,失败则中止并报错;不可含副作用,需用NDEBUG禁用,不替代if错误处理。

Linux 下的 assert() 是 C 语言标准库提供的调试宏,专用于开发阶段检查程序的前置假设是否成立。它不适用于生产环境运行时校验,而是作为开发者自检哨兵,在编译时启用(默认仅 Debug 模式生效),条件失败即中止程序并输出错误位置。
在函数入口验证参数合法性
这是最常见也最推荐的用法:把函数设计时隐含的前提写成显式断言,让调用错误暴露得更早、更明确。
- 检查空指针:
assert(ptr != NULL);—— 避免后续解引用崩溃 - 检查取值范围:
assert(size > 0 && size <= MAX_BUF);应拆为两行,便于定位具体哪条不满足 - 检查数组索引:
assert(index >= 0); assert(index < array_size);
注意表达式不能带副作用
因为 assert 在 Release 版本中通常被预处理器移除(定义 NDEBUG 后),若表达式里含赋值、自增等操作,会导致 Debug 和 Release 行为不一致。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- ❌ 错误写法:
assert(i++ < 100);—— i 在 Release 下不会自增 - ✅ 正确写法:
assert(i < 100); i++;
配合编译开关控制启用状态
默认情况下,assert 在 gcc 编译的 debug 版本中有效;发布前可通过定义 NDEBUG 完全禁用,避免性能损耗和意外依赖。
- 启用断言(默认):
gcc -g source.c -o prog - 禁用断言:
gcc -DNDEBUG -O2 source.c -o prog - 头文件必须包含:
#include <assert.h>
区分 assert 和 if 判断
assert 不是运行时容错手段,而是开发契约声明:
- ✅ 适合:参数非法说明调用方写错了,应立刻暴露
- ❌ 不适合:用户输入错误、文件不存在、网络超时等预期中的异常场景——这些要用
if+ 错误处理逻辑

















