【发布时间】:2015-04-29 20:43:26
【问题描述】:
我最近开始在一个项目中遇到这个问题:
#include <string.h> // includes before include guards
#include "whatever.h"
#ifndef CLASSNAME_H // header guards
#define CLASSNAME_H
// The code
#endif
我的问题:考虑到所有(包含的)头文件都是以相同的样式编写的:这会导致问题(循环引用等)。并且:有什么(好的)理由这样做吗?
【问题讨论】:
-
1) 包括警卫很好。 2)我希望只在标题中看到它们,并且我希望它们包装 ENTIRE 标题。 3) 我会不使用包含代码的守卫。而且我不喜欢在标题中包含代码。 4)您的标题可以(并且应该)#include 任何它需要的东西。您可以放心地假设其他标头都应该有自己的包含守卫。
-
好吧,把你的整个头球放在后卫里面也没什么坏处。但是您包含的其他标头应该已经使用过一次“守卫”#ifndef 或#pragma。您几乎总是可以依靠遵循此约定的系统标头。
-
在包含防护之前没有理由包含包含。但是,如果 '
' 和 '"whatever.h"' 有适当的保护,则无需担心。 -
我发现了一个例子,其中外部包含包含一个定义,然后排除了头文件的其余部分。如果我将它移动到包含保护中,它不再看到定义,即使它们包含在上一行中。我不明白
标签: c++ include-guards