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
N3337 [global.names]:某些名称和函数签名集始终保留给实现:- 每个包含双下划线的名称
__或以下划线后跟大写字母开头的名称都保留给实现以供任何使用.- 以下划线开头的每个名称都保留给实现,以用作全局名称空间中的名称.
您的宏包含双下划线,因此保留给实现.将其更改为有效名称应该可以解决您的问题.