如何将多个 C++ 源代码文件合并到一个项目中?
我正在尝试制作一个 Mad Libs TM程序。我想将我的代码拆分为多个源文件,并且只在我想播放某个 Mad Lib 时运行一个。
如何将多个 C++ 源代码文件合并到一个项目中?
我正在尝试制作一个 Mad Libs TM程序。我想将我的代码拆分为多个源文件,并且只在我想播放某个 Mad Lib 时运行一个。
我可能会建议对您的模型进行完全重新设计。由于您是编程新手,因此我会尽量保持简单,同时仍然会提出您可以从这样的项目中汲取的重要想法。
每个 Mad Lib TM都是一个单独的 C++ 文件。这些文件链接在一起,一个驱动程序根据一些用户或随机输入决定执行哪一个。
问题:
大量代码重复。
例如,每个单独的文件都需要有代码来处理用户输入、Mad Lib 的构建和 Mad Lib 的显示。这可以通过将您的公共代码抽象到另一个库并将其链接到其中来解决,但有更好的方法。此外,如果您需要做一些简单的事情,例如修复 Mad Lib 中的拼写错误,则必须重新编译整个程序!
许多分散的依赖项。
如果你需要改变你处理用户输入的方式,那么你必须改变你所有的 Mad Lib 程序。如果你需要添加一个新的 Mad Lib,你必须编写一个全新的程序/函数。而且,如果其他人想贡献一个 MadLib,他们将必须遵循特定的准则(除非您编写它们)。
调试是一场噩梦。
如果当您需要调试时,您将不得不筛选许多不同的源文件来解决问题。这也可能发生在您的所有文件中。
所以,让我们在一个小规模项目的范围内修复这个模型。
有一个非常简单的解决方案可以解决上面列出的所有问题:
从程序逻辑中抽象出您的 Mad Lib 数据。
在此模型中,您有一个用 C++ 编写的驱动程序。这个 MadLibs 驱动程序将从外部源加载一个 MadLib——很可能是一个文本文件。现在,您的所有程序逻辑都集中在一处,并与实际的 MadLib 内容区分开来。
该程序可以简单地实现:只需逐字读取文件(或逐个令牌,请参阅 参考资料strtok
)将单词写入已完成的输出 Mad Lib。每次遇到空白时,提示用户输入一个符合所要求的语法结构的单词。
您需要为空格指定一种格式——像#noun#或@verb这样的格式可以正常工作。
现在,如果您决定将提示用户的逻辑放入单独的 C++ 文件中,您可以简单地将其包含在预处理器指令中:
#include "path/to/file.h"
如果您的文件在同一目录中,则只需要文件名。如果你这样做,你可能需要先将实际的file.cpp文件编译成它的对象形式,这样链接器才能找到它。你可以这样做:
g++ -c file.cpp
然后,继续正常编译应用程序的其余部分。
如果您遵循我的建议,您将在理解现代编程方法方面取得长足进步。如果你转向一个更大的项目,你会发现所有数据(甚至是“内部”字符串)都被提取到单独的文件中,并且程序逻辑与内容分离。此外,公共代码在共享或应用程序静态库中收集在一起。这为以下情况打开了大门:
我怀疑这是否完全回答了您的问题,但考虑到您的问题的详细程度较低,我无能为力。