拆分.cpp文件而不更改代码

时间:2012-06-03 21:33:46

标签: c++ file-management

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

  

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

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

在您的情况下,将文件分成几个部分。这样做 - 不要添加或减少任何文本行。不要添加标题保护或其他任何东西。您几乎可以在任何方便的位置破坏文件。限制是:中断不得发生在注释内,也不能发生在字符串内,并且必须发生在逻辑行的末尾。

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

对于基本名称,请选择原始文件名,后缀为顺序编号:MyProg01.pcppMyProg02.pcpp等。

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

#include "MyProg01.pcpp"
#include "MyProg02.pcpp"
#include "MyProg03.pcpp"

答案 2 :(得分:1)

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

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

你可以重构一切,但通常不值得努力(除非你因其他原因需要改变一些东西)。

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

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