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

Ala*_*inD 2 c++ c-preprocessor

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

#ifdef _DEBUG_
#define __DEV_MODE_VERBOSE__  // Defined in DEBUG mode only
#endif
Run Code Online (Sandbox Code Playgroud)

这个想法是" __DEV_MODE_VERBOSE__"通常会被注释掉.取消注释后,我可以使用以下内容:

#ifdef __DEV_MODE_VERBOSE__
int test = (5 * GetTickCount());  // Not reached!
#endif      // __DEV_MODE_VERBOSE__
Run Code Online (Sandbox Code Playgroud)

记录通过我的通讯链接发送和接收的命令.#define但是,如果意外地取消注释,则不会在RELEASE(以及生产)代码中进行日志记录.

当我尝试__DEV_MODE_VERBOSE__如上所述定义" "时,它没有定义,因此我不确定语法是否不正确或问题是否更为基础.如果我不在" "和"它" 之间嵌套,则定义符号.#ifdef _DEBUG_#endif

Tar*_*ama 6

N3337 [global.names]: 某些名称和函数签名集始终保留给实现:

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

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

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