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

avb*_*avb 9 c++ include-guards include header-files

我总是把我的#include#ifdef/ #define包含卫队.现在我的IDE(Qt Creator)的重构机制将它放在Include-Guard之前,例如

#include "AnotherHeader.h"

#ifndef MYHEADER_H
#define MYHEADER_H
Run Code Online (Sandbox Code Playgroud)

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

nvo*_*igt 8

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


Car*_*arl 6

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

(无论如何,循环#include's 都不被认为是好的样式,但是如果仍然使用它,它可能与包含防护之后的#includes一起使用,但肯定不会与它们之前的s一起使用。)#include