【问题标题】:what is the difference between header and source files C++?头文件和源文件 C++ 有什么区别?
【发布时间】:2015-05-10 13:41:55
【问题描述】:

我想知道头文件 (h) 和源文件 (cpp) 之间的区别。我们通常使用 headers 来声明和 cpp s 来定义非模板的东西,并使用 2 个不同的 headers 来声明和定义模板。编译甚至关心文件是cpp还是h?他正在做的唯一一件事是使用 include 指令从一个文件复制到另一个文件吗?复制文本的文件类型有关系吗?

【问题讨论】:

标签: c++


【解决方案1】:

当您包含头文件时,它将在编译时内联,这意味着它可能必须包含 C++ 内容(除非整个文件是 cmets)。从这个角度来看,.h 和 .cpp 文件的相同之处在于它们都包含 C++ 代码。

但是,最佳实践要求 .h 文件用于模板和类定义,而 .cpp 文件用于实现和源代码。尽管有可能,但将两者混合使用是不好的做法。

【讨论】:

    【解决方案2】:

    这不是一个完整的答案,但我提供了一些指示。严格来说,C/C++ 语言(或它们的预处理器)并不关心大部分内容——头文件更多是为了方便程序员。

    也就是说,C/C++ 标准确实指定了标准库头文件的存在(但不完全是“头文件”),例如<iostream> 和 <cstdio>。

    这两种语言确实具有“翻译单元”的概念,它是一个或多个编译单元,稍后会链接到最终程序中。在 C++ 中,还有 One Definition Rule 会影响您可以在头文件和 .cpp 文件中放入的内容,而不会在您的程序中重复它们。

    【讨论】:

      【解决方案3】:

      我遇到了以下情况。假设您有两个源文件。

      file1.cpp 有main(),file2.cpp 有一些辅助函数x() 和y()。并且 file1.cpp 有 x() 和 y() 的声明,它将编译并且程序将运行。如果您在 file2.h 而不是 file2.cpp 中定义了函数并且您没有 #include "file2.h" 则将出现编译时错误 undefiend reference to x(),y() 。对于.h 文件中的声明,如果同一文件中没有定义,编译器将在.cpp 文件而不是.h 文件中查找定义。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 2011-03-11
        • 2010-10-29
        • 1970-01-01
        • 2017-10-08
        • 1970-01-01
        • 2012-09-26
        相关资源
        最近更新 更多