在#ifdef / #define之前是#include包括-Guard好吗?

时间:2014-01-08 06:43:06

标签: c++ include header-files include-guards

我总是将#include放在#ifdef / #define Include-Guard之后。现在我的IDE(Qt Creator)的重构机制将它放在Include-Guard之前,例如

#include "AnotherHeader.h"

#ifndef MYHEADER_H
#define MYHEADER_H

这会导致任何问题,还是可以这样离开?

3 个答案:

答案 0 :(得分:6)

如果有问题的标题本身包含警卫,则不会遇到问题。将它放入包含警卫内部仍可加快编译速度。编译器看不到的东西花在编译上的时间较少,即使它没有产生任何错误。

答案 1 :(得分:1)

虽然不太常见,但我认为这被认为是可以接受的,但要注意:如果你有循环#include,你的包含通常会永远包含彼此(直到预解析器抱怨最大包括深度达到)。在包含警卫之后,#include不会发生这种情况。

(循环#include在任何情况下都不被认为是好的风格,但如果使用它,它可能适用于包含警卫后的#include ,但肯定不会在之前使用#include。)

答案 2 :(得分:0)

只需查看,会发生什么。我们假设,两个不同的标题使用MyHeader.h

    无条件地包含
  1. AnotherHeader.h
  2. 包含防护允许加载其余的头文件。
  3. 下一次:

    1. AnotherHeader.h无条件再次包含
    2. 包含防护可以防止加载其余的头文件。
    3. 如果AnotherHeader.h是包含防范的,那么应该发生任何不好的事情。但通常我会将include-guard放在你文件的顶部 - 当它已经加载一次时再次加载AnotherHeader.h没有意义。