如何在最前端强制执行头文件?

时间:2013-09-24 01:59:35

标签: c++ c visual-c++ compiler-construction header-files

动机:

我想启用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 个答案:

答案 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