如何在一个项目中使用多个 C++ 源代码文件? [关闭]

Posted

技术标签:

【中文标题】如何在一个项目中使用多个 C++ 源代码文件? [关闭]【英文标题】:How can I use multiple C++ source code files in a project? [closed] 【发布时间】:2012-07-03 02:18:15 【问题描述】:

如何将多个 C++ 源代码文件合并到一个项目中?

我正在尝试制作一个 Mad LibsTM 程序。我想将我的代码拆分为多个源文件,并且只在我想播放某个 Mad Lib 时运行一个。

【问题讨论】:

您熟悉#include 指令吗? @VanDarg:这几乎肯定不是他想要的。 @houbysoft——同意! @CNoob,您到底想做什么?你能描述你的问题吗?您是要在代码中将文件链接在一起还是将它们拉入 IDE? @CNoob9799,你为什么不发布你的代码?您的问题中没有足够的信息让我们为您提供帮助。代码会帮助我们。 @Riddler:呵呵,这是我的假设,但我认为这可能是某种我不熟悉的library 的拼写错误......无论哪种方式都非常模糊。 :) 【参考方案1】:

我可能会建议对您的模型进行彻底的重新设计。由于您是编程新手,因此我会尽量保持简单,同时仍会提出您可以从此类项目中借鉴的重要想法。

当前型号:

每个 Mad LibTM 都是一个单独的 C++ 文件。这些文件链接在一起,一个驱动程序根据一些用户或随机输入来决定执行哪一个。

问题:

大量代码重复。

例如,每个单独的文件都需要有代码来处理用户输入、Mad Lib 的构建和 Mad Lib 的显示。这可以通过将您的公共代码抽象到另一个库并将其链接到其中来解决,但有更好的方法。此外,如果您需要做一些简单的事情,例如修复 Mad Lib 中的拼写错误,则必须重新编译整个程序!

大量分散的依赖关系。

如果你需要改变你处理用户输入的方式,那么你必须改变所有你的 Mad Lib 程序。如果你需要添加一个新的 Mad Lib,你必须编写一个全新的程序/函数。而且,如果其他人想贡献一个 MadLib,他们将必须遵循特定的准则(除非您编写它们)。

调试是一场噩梦。

如果 当您需要调试时,您必须筛选许多不同的源文件来解决问题。这也可能发生在您的所有文件中。

所以,让我们在一个小型项目的范围内修复这个模型。

建议的修订

有一个非常简单的解决方案可以解决上面列出的所有问题:

从程序逻辑中抽象出你的 Mad Lib 数据。

在此模型中,您有一个用 C++ 编写的驱动程序。这个 MadLibs 驱动程序将从外部源加载一个 MadLib——很可能是一个文本文件。现在,您的所有程序逻辑都集中在一处,并与实际的 MadLib 内容区分开来。

这个程序可以简单地实现:只需逐字读取文件(或逐个令牌,请参阅strtok)将单词写入已完成的输出 Mad Lib。每次遇到空格时,提示用户输入符合所请求语法结构的单词。

您需要为空格指定一种格式——像 #noun#@verb 这样的格式可以正常工作。


包括多个文件

现在,如果您决定将提示用户的逻辑放入单独的 C++ 文件中,您可以简单地将其包含在 preprocessor 指令中:

#include "path/to/file.h"

如果您的文件在同一目录中,您只需要文件名。如果您这样做,您可能需要先将实际的 file.cpp 文件编译成它的对象形式,以便 链接器 可以找到它。你可以这样做:

g++ -c file.cpp

然后,继续正常编译应用程序的其余部分。


总结:

如果您遵循我的建议,您将在理解现代编程方法方面取得长足进步。如果您转向更大的项目,您会发现所有数据(甚至是“内部”字符串)都被提取到单独的文件中,并且程序逻辑与内容分离。此外,公共代码在共享或应用程序静态库中收集在一起。这为以下情况打开了大门:

易于本地化。 琐碎的拼写或语法更正或内容的一般更改。 更好的可扩展性 - 想象一个包含 100,000 个 Mad Lib 文件的程序。 代码可重用性。 快乐的程序员 (=

【讨论】:

【参考方案2】: 创建源文件 在文件中编写代码 转到包含 main 的文件 使用#include 指令添加其他源文件 预处理器将完成剩下的工作

我怀疑这是否完全回答了您的问题,但考虑到您问题的详细程度较低,我无能为力。

【讨论】:

请注意,#include 只是有时合适。 谢谢你的帮助 @sarnold 只是出于个人好奇——#include not 什么时候合适? @Riddler:大多数项目只有#include header 文件,并允许每个文件成为自己的编译单元。这样,您可以单独编译每个文件 - 大大加快项目重建速度,因为只需要重建更改的文件 - 并且更容易找到文件中的错误。第一个包含文件末尾的不匹配 会破坏您的整个编译,并且您将很难找到它。 #include 指令由 预处理器 处理; 链接器不处理它。

以上是关于如何在一个项目中使用多个 C++ 源代码文件? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

发出c++代码system()调用外部编译器编译其他c++代码

如何运行visual c++下多个cpp文件,就是在同一个项目下建立了多个.cpp源文件,但是无法生成,运行第二个

如何将 <glad/glad.h> 包含在 C++ 中的多个头文件中?

在 C++ 中,如何使用多个线程读取一个文件?

如何在 C++ 项目中运行多 cpp?

visual studio 2010 一个解决方案里有多个c++源文件 怎么只执行其中一个?