1. 基础需求:
我们在调试c语言时,通常用printf函数输出调试信息,而printf函数默认是输出到缓冲区,等到缓冲区满了以后才输出,或者等到输出换行符后才输出。特别是在qt里边,printf函数的输出即使包含换行也需要等到缓冲区满了以后才输出,此时如果需要实时得到调试信息的输出怎么办?可以采用fflush(stdout)即可。
printf("Error happend!"); fflush(stdout); // 增加fflush(stdout)后就会立即输出到设备
而为了简单起见,可以定义成一个宏
#define PRINT(str) printf(str);fflush(stdout)
// 调用时如下即可简单实现即时输出
PRINT("Error Happened!");
2. 进阶需求:
如果需要输出的内容不只一个参数,此时就需要借用多变量宏
#define PRINT(...) printf(__VA_ARGS__);fflush(stdout)
// 调用时如下即可在宏指令中输入多个printf相关变量,并做到即时输出
// 同时利用了宏指令__FUNCTION__和__LINE__输出报错函数名和行号
PRINT("Error Happened in Function %s, line: %d.", __FUNCTION__, __LINE__);
3. 进阶需求:
如果希望debug模式输出调试信息,而release模式不输出这些信息,此时可以利用预处理器来对宏定义进行条件编译
#if _DEBUG // 借用vs下预定义宏_DEBUG,也可以自定义一个预处理宏添加到属性/C/C++/预处理器/预处理器定义中
PRINT("Error Happened in Function %s, line: %d.", __FUNCTION__, __LINE__);
#elif NDEBUG // 借用vs下预定义宏NDEBUG
#define PRINT // 防止程序出错,从而程序无需修改
#endif
如果你喜欢,点赞哦!