我总是把我#include
的 放在#ifdef
/ #define
Include-Guard 之后。现在我的 IDE(Qt Creator)的重构机制把它放在 Include-Guard 之前,例如
#include "AnotherHeader.h"
#ifndef MYHEADER_H
#define MYHEADER_H
这会导致任何问题还是我可以这样离开它?
我总是把我#include
的 放在#ifdef
/ #define
Include-Guard 之后。现在我的 IDE(Qt Creator)的重构机制把它放在 Include-Guard 之前,例如
#include "AnotherHeader.h"
#ifndef MYHEADER_H
#define MYHEADER_H
这会导致任何问题还是我可以这样离开它?
如果有问题的标题本身包含警卫,您将不会遇到问题。将它放在包含守卫中仍然可以加快编译速度。编译器看不到的东西需要更少的时间来编译,即使它不会产生任何错误。
虽然不太常见,但我认为这被认为是可以接受的,但请注意:如果您有循环#include
,您的包含通常会永远相互包含(直到预解析器抱怨达到最大包含深度)。#include
包含守卫之后的 's不会发生这种情况。
(在任何情况下,Circular#include
都不被认为是好的风格,但如果仍然使用它,它可能会在 include 保护之后#include
与's一起使用,但肯定不会与它们之前的's一起使用。)#include
只需检查一下,会发生什么。让我们假设,两个不同的标题使用MyHeader.h
.
AnotherHeader.h
无条件包含下一次:
AnotherHeader.h
再次无条件收录如果AnotherHeader.h
是包含保护的,则不会发生任何不好的事情。但一般来说,我会将 include-guard 放在文件的顶部 -AnotherHeader.h
当它已经加载一次时,再次加载是没有意义的。