我总是将#include
放在#ifdef
/ #define
Include-Guard之后。现在我的IDE(Qt Creator)的重构机制将它放在Include-Guard之前,例如
#include "AnotherHeader.h"
#ifndef MYHEADER_H
#define MYHEADER_H
这会导致任何问题,还是可以这样离开?
答案 0 :(得分:6)
如果有问题的标题本身包含警卫,则不会遇到问题。将它放入包含警卫内部仍可加快编译速度。编译器看不到的东西花在编译上的时间较少,即使它没有产生任何错误。
答案 1 :(得分:1)
虽然不太常见,但我认为这被认为是可以接受的,但要注意:如果你有循环#include
,你的包含通常会永远包含彼此(直到预解析器抱怨最大包括深度达到)。在包含警卫之后,#include
不会发生这种情况。
(循环#include
在任何情况下都不被认为是好的风格,但如果使用它,它可能适用于包含警卫后的#include
的 ,但肯定不会在之前使用#include
的。)
答案 2 :(得分:0)
只需查看,会发生什么。我们假设,两个不同的标题使用MyHeader.h
。
AnotherHeader.h
下一次:
AnotherHeader.h
无条件再次包含如果AnotherHeader.h
是包含防范的,那么应该发生任何不好的事情。但通常我会将include-guard放在你文件的顶部 - 当它已经加载一次时再次加载AnotherHeader.h
没有意义。