c - 用于定义宏集的 C 宏
问题描述
我有一系列可以扩展为函数调用或无操作语句的调试宏。
#define NOOP do {} while(0)
#ifdef DEBUG
#define DEBUG_LOG(a) log(a)
#define DEBUG_LOG_HEX(a, b) log_hex(a, b)
#else
#define LOG(a) NOOP
#define LOG_HEX(a, b) NOOP
#endif
我想要一个可以快速定义这些全局宏的模块特定版本的宏,可以通过额外的#define 打开和关闭。我想在宏观层面上做到这一点,因为我处于代码大小极其受限的环境中。
我知道这是不合法的,但我希望它表明我希望实现的目标:
#define MODULE_DEBUG(MNAME) \\
#ifdef ##MNAME_DEBUG \\
#define ##MNAME_DEBUG_LOG DEBUG_LOG \\
#define ##MNAME_DEBUG_LOG_HEX DEBUG_LOG_HEX \\
#else \\
#define ##MNAME_DEBUG_LOG NOOP \\
#define ##MNAME_DEBUG_LOG_HEX NOOP \\
#endif
作为示例用法,这将调用 log("foo")。但是如果没有设置 DEBUG,或者没有设置 BLE_DEBUG,它将 NOOP。
#define DEBUG
#define BLE_DEBUG
MODULE_DEBUG(BLE);
BLE_DEBUG_LOG("foo");
解决方案
推荐阅读
- iis - 无法侦听给定端口 .net core 2.0 IIS
- angular - 如何检查多个订阅是否达到 onComplete()?
- php - PHP:CHECK 记录可用性 SQL
- c++ - 如何组合多个连续图像来模拟逼真的运动模糊?
- jenkins - Jenkins Pipeline 定义和设置变量
- android-studio - 无法运行安卓工作室
- jquery - 为什么音频对象在不播放音频时为 toISOString() 提供错误“无效时间值”?
- ms-access - 引用连接查询的 MS Access Dlookup
- docker - 如何使用特定用户组挂载文件
- java - 如何在 IDE 外使用 Java Mail 发送邮件