动机:
我想启用VC ++的内存检测,这要求某些语句必须如下所示:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
问题:
假设我有一个头文件forefront.h
,我想要的是以下效果:
a.cpp
#include <any_other_one.h>
#include <forefront.h> // An compiler error generated here!
b.cpp
#include <forefront.h> // OK
#include <any_other_one.h>
如何实施?
答案 0 :(得分:1)
由于您真正要问的是如何确保在所有编译单元中定义_CRTDBG_MAP_ALLOC
,请使用VC ++项目系统添加该定义。转到项目属性对话框,并在C ++预处理器部分中将_CRTDBG_MAP_ALLOC
添加到预处理器定义行。
答案 1 :(得分:1)
我认为这是我提出的最具侵入性的解决方案,
将以下内容放在forefront.h
的开头,
#if (__LINE__ != 0)
#error ERROR_FORE_FRONT_IS_NOT_THE_FIRST_TO_INCLUDE
#endif
您无需更改others.h
。
我用GCC 4.6.3测试了这段代码。
答案 2 :(得分:1)
使用以下内容创建自己的头文件:
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
现在使用项目设置的“高级”部分中的“强制包含”设置。其中指定的任何文件将按照指定的顺序包含在所有其他文件之前。
答案 3 :(得分:0)
我想这样的事情可能有用:
<强> other.h 强>
#ifndef OTHER_H_
#define OTHER_H_
...
#endif
<强> forefront.h 强>
#ifdef OTHER_H_
#error Wrong include order
#endif