如何在项目中使用多个C ++源代码文件?

时间:2012-07-03 02:18:15

标签: c++ visual-c++ c++11

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

我正在尝试制作一个Mad Libs TM 计划。我想将我的代码拆分为多个源代码文件,只在我想播放某个Mad Lib时运行一个。

2 个答案:

答案 0 :(得分:3)

我可能会建议您完全重新设计您的模型。由于您不熟悉编程,我会尽量保持简单,同时仍然可以从这样的项目中找到重要的想法。

当前型号:

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

问题:

  • 很多代码重复。

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

  • 很多分散的依赖。

    如果您需要更改处理方式,比如用户输入,则必须更改所有您的Mad Lib程序。如果你需要添加一个新的Mad Lib,你必须编写一个全新的程序/函数。而且,如果其他人想要提供MadLib,他们必须遵循特定的指导原则(除非您编写它们)。

  • 调试是一场噩梦。

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

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

建议的修订

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

  • 从程序逻辑中提取您的Mad Lib数据。

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

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

您需要为空白指定格式 - 例如 #noun# @verb 可以正常工作。


包含多个文件

现在,如果您决定将提示用户的逻辑放入单独的C ++文件中,您只需将其包含在预处理器指令中即可:

#include "path/to/file.h"

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

g++ -c file.cpp

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


摘要:

如果您遵循我的建议,您将在理解现代编程方法方面取得重大进展。如果你转移到一个更大的项目,你会发现所有数据(甚至是内部'字符串)被拉出到单独的文件中,程序逻辑与内容分离。此外,公共代码在共享或应用程序静态库中收集在一起。这打开了大门:

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

答案 1 :(得分:2)

  • 创建源文件
  • 将您的代码写入文件
  • 转到包含主要
  • 的文件
  • 使用#include指令添加其他源文件
  • 预处理器将完成其余的工作

我怀疑这是否完全回答了你的问题,但考虑到你问题中的细节水平低,我无能为力。