0

动机:

我想开启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>

如何实施?

4

4 回答 4

1

使用以下内容创建您自己的头文件:

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

现在使用项目设置的高级部分中的强制包含设置。此处指定的任何文件都将按照指定的顺序在所有其他文件之前包含在内。

于 2013-09-24T04:38:46.163 回答
1

我认为这是我想出的最非侵入性的解决方案,

将以下内容放在开头forefront.h

#if (__LINE__ != 0)
#error ERROR_FORE_FRONT_IS_NOT_THE_FIRST_TO_INCLUDE
#endif

你不需要改变others.h

我用 GCC 4.6.3 测试了这段代码。

于 2013-09-24T02:19:07.890 回答
1

由于您真正要问的是如何确保_CRTDBG_MAP_ALLOC在所有编译单元中定义,请使用 VC++ 项目系统添加该定义。转到项目属性对话框,然后在 C++ Preprocessor 部分添加_CRTDBG_MAP_ALLOC到 Preprocessor Definitions 行。

于 2013-09-24T02:15:17.140 回答
0

我想这样的事情可能会奏效:

其他.h

#ifndef OTHER_H_
#define OTHER_H_
...

#endif

前沿.h

#ifdef OTHER_H_
  #error Wrong include order
#endif
于 2013-09-24T02:03:47.770 回答