我可以定义一个定义宏的宏吗?

Nik*_*iou 6 c++ macros

通过查看VS中的内存泄漏检测机制,我想到了这个问题.那里需要以下样板代码:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
Run Code Online (Sandbox Code Playgroud)

但用以下代码替换此代码DETECT_MLEAKS:

#define DETECT_MLEAKS\
#define _CRTDBG_MAP_ALLOC\
#include <stdlib.h>\
#include <crtdbg.h>\
Run Code Online (Sandbox Code Playgroud)

无法做到.

有任何解决方法 - 建议?

Ide*_*Hat 6

//#define DETECT_MLEAKS //Uncomment to detect mem-leaks
#ifdef DETECT_MLEAKS
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif
Run Code Online (Sandbox Code Playgroud)

我通常是这样做的.


Kaz*_*Kaz 4

在标准C语言中,宏不能生成预处理指令。例如在 ISO 9899:1999 标准中:

6.10.3.4 重新扫描和进一步更换

[...]

生成的完全宏替换的预处理标记序列不会作为预处理指令进行处理,即使它类似于一个,[...]

(这种“即使它类似于一个”的说法是完全多余的,因为当然,如果它不类似于一个语法,则任何语法都不会被视为预处理指令!然而,这些词多年来一直在您的脑海中挥之不去。我刚刚找到了引用的位置部分通过在文档中搜索字符串“resembles one”。)