调试宏在c编程中比较重要,通常用于前期测试打印调试信息,然后正式发布时,只需要修改宏,就能取消打印全部调试信息,非常方便。
fmt为希望输出的调试信息,比较关键的就是(fmt,...)和##__VA_ARGS__,__VA_ARGS__用于把...替换成宏并连接。
典型用法:
void DefaultFlashSet(void)
{
// 若Flash标记地址的值没有被正确的写入,则重新写入,只会在全片擦除后执行
if ((InternalFlashRead(FLASH_SIGN_ADDR) != FLASH_WRITE_SIGN)) {
DEBUG_INFO("Flash擦除");
InternalFlashWrite(FLASH_WRITE_ADDR, MAX_LED_NUM);
}
else {
DEBUG_INFO("读取数据成功");
}
}
DEBUG_INFO("这是第%d条调试打印", 6);
串口打印结果
debug.h
/**
******************************************************************************
* Copyright (c) 2019 temp. All Rights Reserved.
* @file debug.h
* @author
* @brief 调试宏头文件
* @version V1.0
* @data 2019/08/09
* @note None
******************************************************************************
*/
#ifndef __DEBUG_H
#define __DEBUG_H
#include <stdio.h>
#define DEBUG
#ifdef DEBUG
#define DEBUG_LINE() \
printf("Log: [%s:%s] line = %d\n", __FILE__, __func__, __LINE__)
#define DEBUG_INFO(fmt, ...) \
printf("Log: [%s:%s] line = %d\n" fmt "\n", __FILE__, __func__, __LINE__, \
##__VA_ARGS__)
#else
#define DEBUG_LINE()
#define DEBUG_INFO(fmt, ...)
#endif
#endif /* __DEBUG_H */