头文件和源文件C ++有什么区别?

时间:2015-05-10 13:41:56

标签: c++

我想知道header(h)和source(cpp)文件之间的区别。我们通常使用头部用于声明和cpp用于定义非模板的东西,并使用2个不同的头部用于声明和定义模板。编译甚至关心文件是cpp还是h?他所做的唯一不是用include指令从一个文件复制到另一个文件吗?文本被复制的文件类型是否重要?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

也就是说,C / C ++标准确实指定了标准库标题的存在(不完全是&#34;标题文件&#34;但是),例如<iostream><cstdio>

两种语言确实拥有的是&#34;翻译单元&#34;的概念,它们是一个或多个编译单元,后来链接到最终程序中。在C ++中,还有One Definition Rule会影响您在头文件和.cpp文件中放置的内容,而不会在程序中出现重复。

答案 2 :(得分:0)

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

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文件。