【问题标题】:Compiling a program with multiple files编译具有多个文件的程序
【发布时间】:2011-08-25 04:21:44
【问题描述】:

我刚开始使用 Dev C++ 作为我的 IDE 来学习 C++。我正在使用的其中一个教程中有一个关于编译由多个文件组成的程序的页面。在这一点上很简单,我有一个文件,其中包含一个函数,另一个文件包含调用函数和输出结果所需的所有其他代码。问题是教程没有告诉我如何加入这些文件,所以我可以编译程序并让它工作。似乎有多种方法可以做到这一点,我想要它们,但我现在主要寻找最简单的一种。

我还应该提一下,我是这方面的新手,所以请尽量让您的解释简单易懂。

【问题讨论】:

    标签: c++ compilation dev-c++


    【解决方案1】:

    通常,您会将两个.cpp 文件添加到同一目标下的项目中。它的 IDE 会自动将这两个文件添加到构建中并将它们链接在一起。


    也就是说,Dev-C++ 非常、非常陈旧且无人维护。它已经好几年没有更新了。我强烈建议您使用不同的 IDE。有许多可供选择,包括一个名为wxDev-C++ 的 Dev-C++ 分支。我实际上推荐Code::BlocksVisual Studio Express,它们都更现代,并且对调试和许多其他功能有更好的支持。

    【讨论】:

    • 感谢您的信息。听说Dev-C++基本被淘汰了,不知道wxDev-C++是延续;我还以为是别人捡的老实说,无论如何我都不太喜欢它。
    • 迟到的评论:截至今天(2017 年),wxDev-C++ 本身在大约 6 年内没有更新(最后一次更新是 2011 年;最后一次报告错误是 2012 年)。另一方面,Dev-C++ by Orwell 的另一个分支于 2 年前(2015 年)发布。
    【解决方案2】:

    我不确定 Dev-C++,但概念保持不变。因此,您可以通过以下方式尝试让这两个文件一起工作

    1. 每个 C++ 文件都是一个编译单元 - 意思是,编译器会将一个 .cpp / .cxx 文件分别转换为一个 .obj / .o 文件(在 Windows 和 Linux(或任何 Unix)上)
    2. 称为目标文件的 obj 文件包含该特定文件中存在的类和函数的机器代码(此处略过一些内部细节)
    3. 如果您想访问不同编译单元中的函数,您需要链接这两个目标文件
      • 链接是一个术语,用于链接两个目标文件
      • 有一个单独的进程(编译器除外)负责链接目标文件
    4. 因此,在您的情况下,您需要使用 dev-c++ 编译器并创建单独的目标文件
    5. 然后使用链接器链接两个目标文件以创建最终的可执行文件

    如果 .cpp 文件中存在要引用的函数,则使用头文件。头文件包含函数/类声明。 .cpp 文件将具有实现。因此,在您的一个 .cpp 文件(例如)A.cpp 中,您包含头文件 B.hpp 并使用 B.hpp 文件中的函数。包含头文件将告诉编译器函数声明存在于其他地方,并且链接器将负责将所有这些引用串在一起以创建最终的可执行文件。

    希望这会有所帮助,否则,请不要犹豫提及您正在使用的文件,我可以建议如何将两个 .cpp 文件链接在一起。

    【讨论】:

    • 谢谢。我想出了如何去做,但这有助于加强我对这个过程的理解。我只是忘记了我需要转发声明该函数以便它可以编译。
    【解决方案3】:

    您必须使用 #include 预处理器指令包含其他文件 在你有 main() 函数的文件的顶部

    例如:

    #include "filename.h"
    ...
    /* rest of code containing main function goes here */
    ...
    

    【讨论】:

      【解决方案4】:
      #include "path/filename.c"
      
      main
      {
      ...
      ...
      ...
      }
      

      【讨论】:

      • 您能否为此添加一些解释,并且可能(考虑到所提出问题的级别),使用正确的语法声明main
      • 除了语法问题和缺乏解释之外,拥有多个文件的想法通常是分别编译它们。这个答案只是将它们包括在一起,这通常是一个坏主意。
      猜你喜欢
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      相关资源
      最近更新 更多