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

3

我希望你能帮我翻译一下头文件(h)和源文件(cpp)之间的区别。通常我们使用头文件进行非模板内容的声明,使用cpp文件进行定义,并且对于模板,我们需要使用两个不同的头文件进行声明和定义。编译器是否关心文件是cpp还是h呢?它所做的唯一事情就是通过include指令从一个文件复制到另一个文件吗?从哪种类型的文件复制文本是否重要?


可能是为什么在C++中需要头文件和.cpp文件?的重复问题。 - m.s.
只有源代码文件会被编译。头文件则是用于在多个源代码文件中出现的。 - Drew Dormann
3个回答

4
当你包含一个头文件时,它将在编译时内联,这意味着它可能必须具有C++内容(除非整个文件都是注释)。从这个角度来看,.h.cpp文件相同,因为它们都包含C++代码。
然而,最佳实践规定.h文件用于模板和类定义,而.cpp文件用于实现和源代码。混合使用两者是不好的实践,尽管这是可能的。

0

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

话虽如此,C/C++标准确实指定了标准库头文件的存在(虽然不完全是“头文件”),例如<iostream><cstdio>

两种语言都有“翻译单元”的概念,这是一种或多种编译单元,稍后将它们链接在一起形成最终程序。在C++中,还有一个定义规则,它影响您可以将什么放入头文件与.cpp文件中,而不会在程序中重复出现。


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 文件中查找定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接