- 程序在发布时包含一些用于调试的代码,这些代码在程序开发时使用。当应用程序编写完成之后,就需要删除这些调试代码
- 调试代码经常用到两个预处理的功能:assert和NDEBUG
1.功能
- assert是一种预处理宏,用于调试代码。经常用于检查“不能发生”的条件
- 包含在#include <assert.h头文件中>
2.格式
assert(expr);
- 如果expr正确(非0),assert什么也不做
- 如果expr错误(为0),assert输出信息并终止程序的执行
3.注意事项
- 该预处理宏只能在程序的DEBUG版本版本中使用,不能在非DEBUG版本中使用(受限于NODEBUG预处理变量)
1.功能
- 如果定义了此预处理变量,则程序此时处于非DEBUG状态,就不能使用assert预处理宏
2.注意事项
- 此预处理变量默认为非定义状态,需要手动给出定义
- 如果给出了NDEBUG,程序就不能使用assert了。但是#define NDEBUG必须定义在#include <assert.h的前面>。因为必须在<assert.h>的前面,所以有两种方法定义NDEBUG预处理变量(①在命令行加入宏:gcc -D NDEBUG ②在程序代码中将NDEBUG定义在<assert.h>的前面)
3.使用场景
- 此预处理变量可以配合#ifndef、#ifdef、#endif来使用,来区分调试代码和非调试代码
#include <stdio.h>
#define NDEBUG //必须定义在<assert.h>前面
#include <assert.h>
int main()
{
#ifdef NDEBUG //如果定义了就执行一下部分
printf("HelloWorld\n");
#endif
assert(0); //无效,不起作用
printf("HelloWorld\n");
return 0;
}