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

时间:2014-07-18 18:49:37

标签: c++ macros

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

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

但是将此代码替换为DETECT_MLEAKS

#define DETECT_MLEAKS\
#define _CRTDBG_MAP_ALLOC\
#include <stdlib.h>\
#include <crtdbg.h>\

无法完成。

是否有任何变通办法 - 建议?

2 个答案:

答案 0 :(得分:6)

//#define DETECT_MLEAKS //Uncomment to detect mem-leaks
#ifdef DETECT_MLEAKS
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#endif

我通常是这样做的。

答案 1 :(得分:4)

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

  

6.10.3.4重新扫描和进一步更换

     

[...]

     

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

(这个&#34;即使它类似于一个&#34;评论是完全多余的,因为当然,如果类似于一个语法,那么语法不会被视为预处理指令! ,这些词语多年来一直存在于你的脑海中。我只是通过在文档中搜索字符串来找到引用的部分&#34;类似于一个&#34 ;.)