基于另一个已定义符号的条件#define

Conditional #define based on another defined symbol

本文关键字:符号 条件 #define 定义符 定义 另一个      更新时间:2023-10-16

是否有可能在C/c++中嵌套预处理器#define(在本例中为#ifdef)?我希望能够这样做:

#ifdef _DEBUG_
#define __DEV_MODE_VERBOSE__  // Defined in DEBUG mode only
#endif

这个想法是" __DEV_MODE_VERBOSE__ "通常会被注释掉。当没有注释时,我可以使用如下代码:

#ifdef __DEV_MODE_VERBOSE__
int test = (5 * GetTickCount());  // Not reached!
#endif      // __DEV_MODE_VERBOSE__

记录通过我的通信链接发送和接收的命令。如果#define不小心没有注释,那么日志记录将不会发生在发布(因此也不会发生在生产)代码中。

当我尝试如上所述定义"__DEV_MODE_VERBOSE__"时,它没有定义,所以我不确定语法是否错误,或者问题是否更根本。符号定义的,如果我不嵌套在" #ifdef _DEBUG_ "和它的" #endif "之间。

N3337 [global.names]:某些名称和函数签名的集合总是保留给实现:

- 每个包含双下划线__或以下划线后跟大写字母开头的名称都保留给实现以供任意使用。

—每个以下划线开头的名称都保留给实现,以用作控件中的名称全局名称空间。

宏包含双下划线,因此保留给实现使用。将其更改为有效名称应该可以解决您的问题。