包括问题和包括警卫

Posted

技术标签:

【中文标题】包括问题和包括警卫【英文标题】:Include Problems and Include Guards 【发布时间】:2014-04-14 19:58:53 【问题描述】:

我和我的团队正在开展一个相当大的项目,其中包含许多具有各自头文件和源文件的类。我们正在尝试将 C++ 库和项目类头文件中的所有包含合并到一个名为“Includes.h”的文件中,该文件包含在每个头文件中。这样做时我遇到的一个问题是类头文件基本上包括它们自己。我在每个头文件的顶部都包含了#pragma once。当我注释掉“#Includes.h”文件中的#include "Controller.h" 时,“Controller.h”的错误就会消失。

【问题讨论】:

在网上搜索“c++ include guards”。 #pragma once 不能跨编译器移植。 【参考方案1】:

拜托拜托,漂亮请不要这样做。

更喜欢前向声明。然后是单独的包含文件。

否则你改变一个包含文件,它必须编译很多。 IE。浪费时间。

基本上让每个头文件都能用空白的cpp文件编译。最小依赖。

【讨论】:

在每个头文件中直接包含其他头文件更好吗?有没有办法将它们全部包含在内,只从 Includes.h 中排除执行包含的文件?几乎所有标题都包含其余标题。 @user3516792 - 头文件应该只使用前向声明。为什么不使用它们时都包括它们? @user3516792:请不要使用庞大的包含文件。它搞砸了构建系统的文件依赖关系。如果更改了一个头文件,则必须构建所有文件,包括那些不使用更改后的头文件的文件。因此,构建系统将编译所有 200 个文件,而不是从 200 个文件中编译一个。 好的,谢谢大家!我最终返回并在每个标题中添加了特定的包含,现在它运行良好。不会再试了!感谢您的所有帮助!

以上是关于包括问题和包括警卫的主要内容,如果未能解决你的问题,请参考以下文章

C包括警卫[重复]

犯错误:多个定义...尽管包括警卫

使用“#define FOO”而没有分配任何值——除了包括警卫之外?

c ++包括警卫不起作用,错误[重复]

c_cpp 包括警卫

bzoj 3716: [PA2014]Muzeum