4

我有一个 .cpp 变得相当大,为了便于管理,我想将它分成几个文件。但是,有许多全局变量,我想避免在不同文件中管理一堆 extern 声明。有没有办法让多个 .cpp 文件充当一个文件?从本质上讲,我想要一种方法来划分代码,而编译器不会识别这种划分。

4

3 回答 3

6

有没有办法让多个 .cpp 文件充当一个文件?

是的。这就是 的定义#include。当您#include创建一个文件时,您可以对包含的文件进行文本替换来代替#include指令。因此,多个包含的文件共同作用以形成一个翻译单元。

在您的情况下,将文件切成几位。准确地做到这一点——不要添加或减少任何文本行。不要添加标题保护或其他任何东西。您几乎可以在任何方便的位置破坏您的文件。限制是:中断不能出现在注释内,也不能出现在字符串内,并且必须出现在逻辑行的末尾。

根据某种约定命名新创建的部分文件。它们不是完整的翻译单元,所以不要命名它们*.cpp。它们不是正确的头文件,所以不要命名它们*.h。相反,它们是部分完整的翻译单元。也许你可以命名它们*.pcpp

至于basename,选择原始文件名,后缀为: MyProg01.pcpp,,MyProg02.pcpp等。

最后,用一系列#include语句替换您的原始文件:

#include "MyProg01.pcpp"
#include "MyProg02.pcpp"
#include "MyProg03.pcpp"
于 2012-06-03T21:48:49.720 回答
5

当然,您总是可以将各种 CPP 文件 #include 到一个主文件中,这是编译器看到的那个。不过,这是一个非常糟糕的主意,而且您最终会遇到比正确重构文件更糟糕的问题。

于 2012-06-03T21:37:23.047 回答
1

虽然您可以在许多 cpp 文件中声明相同的全局变量集,但当编译器编译每个文件时,您将获得每个单独的实例,然后在它们组合时将无法链接。

唯一的答案是将所有全局变量放在自己的文件中,然后将它们剪切并粘贴到包含 extern 声明的头文件中(这可以很容易地自动化,但我发现使用箭头键将“extern”粘贴到它们前面是快速简单)。

您可以重构所有内容,但通常不值得付出努力(除非您出于其他原因需要更改某些内容)。

您可以尝试拆分文件,然后使用编译器告诉您每个新文件需要哪些全局变量,然后将这些全局变量直接重新引入每个文件,分别保留真正的全局变量。

如果您不想这样做,只需#include cpp 文件。

于 2012-06-03T21:49:15.803 回答