包括问题和包括警卫
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 个文件中编译一个。 好的,谢谢大家!我最终返回并在每个标题中添加了特定的包含,现在它运行良好。不会再试了!感谢您的所有帮助!以上是关于包括问题和包括警卫的主要内容,如果未能解决你的问题,请参考以下文章