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

6

通过查看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>\

无法完成。

有没有任何解决方法或建议?


8
你可以将这些代码行(以及一个包含保护)放在detect_memleaks.h文件中,然后使用#include "detect_memleaks.h"来代替... - slazyk
2个回答

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

这通常是我处理这类事情的方式。

4
在标准C语言中,宏无法生成预处理指令。例如,在ISO 9899:1999标准中所述:
6.10.3.4 重新扫描和进一步替换
[...]
即使完全被宏替换的预处理令牌序列看起来像一个预处理指令,也不会将其视为预处理指令。
(“即使看起来像一个预处理指令”这句话是多余的,因为如果某个语法不像预处理指令,那它就从未被视为预处理指令!然而,这句话会在你脑海中停留多年。我刚刚通过搜索文件中的“resembles one”字符串找到了引用该引用的部分。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接