是否可以打包C ++库?

时间:2014-09-22 15:00:27

标签: c++ header

我知道在C ++中你必须使用“#include”语句来包含库和标题,例如:

#include <iostream>
#include <string>

#include "my_header.h"

但过了一段时间,这看起来非常难看,你的文件中包含了大量的包含。我想知道是否有一些方法我们可以只调用一个文件来包含我们在C ++项目中需要的一切。有点像......

“include_everything.h”

#include <iostream>
#include <string>

#include "header1.h"
#include "header2.h"

然后在我们的.cpp文件中,我们可以去吗?

#include "include_everything.h"

// write code here...

如果有可能,这是合法的吗?它是否遵守C ++编码规则?

提前致谢, Gumptastic

3 个答案:

答案 0 :(得分:1)

如果这是您决定不遵循的唯一规则,那么您可能会没事。但是,根据其中一些标题包含的内容(宏,#define等),最终可能会出现可怕的混乱。

我已经看到人们包含了他们认为需要的内容(通常最终会比他们未能考虑前方声明所需要的更多)。在一个大型软件项目中,每个CPP文件最终都会加载几乎每个包含文件(由于链接)。通常,同一个文件会多次加载,只有在触发顶部的#ifndef语句后才会被排除。操作系统最终为每个编译打开了超过100k的文件,即使项目中只有50k文件。在这种可怕的情况下,它可能有所帮助。

它可以为开发人员节省时间,因为他们通常不必搜索定义的内容,并将其添加到他们所处理的每个文件的包含列表中。做一次而忘记。让编译器告诉您是否需要将新文件添加到&#39;所有内容中。

除了宏问题之外,您可能会遇到重叠名称的问题,如果您没有正确使用名称空间。此外,模板类通常在头文件中包含实际代码。这可能会造成客户流失。

如果人们使用全局变量并且他们正在使局部变量黯然失色,那么它也可能会导致问题。可能很难弄清楚那个全球性的&#39; i&#39;如果您必须搜索“所有内容”中的所有文件,则会定义并将其拉入。而不只是包含列表中的文件。

你可以做到。如果它只是你并且包含了你的错误,那就去吧。如果你是你的芽正在做某事,当然。如果您尝试在中型或更大型项目上执行此操作,您将会认真地看待人们。

充其量,我不建议使用超越捆绑紧密捆绑的标题组合成一个更连贯的API。

答案 1 :(得分:0)

您可以这样做,但可能会影响编译时间。

C(++)#include编译器指令仅仅意味着&#34;在编译之前,请复制并粘贴该文件的内容&#34;。这意味着当您包含的页眉多于必要时,编译每个源文件需要更长的时间。但是当你不关心它时,请继续。

答案 2 :(得分:0)

是的,你可以做到。您可以递归地包含标题。

但是,如果您要包含这么多标题,那么这是一个问题,要么您不需要包含ithings,要么您的源文件方式过于庞大

因此,很难做到这一点,我甚至认为它是一个代码味道。您真正想要这样做的唯一时间是您要预编译include_everything.h

相关问题