我希望你能帮我翻译一下头文件(h)和源文件(cpp)之间的区别。通常我们使用头文件进行非模板内容的声明,使用cpp文件进行定义,并且对于模板,我们需要使用两个不同的头文件进行声明和定义。编译器是否关心文件是cpp还是h呢?它所做的唯一事情就是通过include指令从一个文件复制到另一个文件吗?从哪种类型的文件复制文本是否重要?
我希望你能帮我翻译一下头文件(h)和源文件(cpp)之间的区别。通常我们使用头文件进行非模板内容的声明,使用cpp文件进行定义,并且对于模板,我们需要使用两个不同的头文件进行声明和定义。编译器是否关心文件是cpp还是h呢?它所做的唯一事情就是通过include指令从一个文件复制到另一个文件吗?从哪种类型的文件复制文本是否重要?
.h
和.cpp
文件相同,因为它们都包含C++代码。.h
文件用于模板和类定义,而.cpp
文件用于实现和源代码。混合使用两者是不好的实践,尽管这是可能的。这不是一个完整的答案,但我提供了一些指针。严格来说,C/C++语言(或它们的预处理器)大部分情况下并不关心头文件——头文件更多地是为了程序员方便。
话虽如此,C/C++标准确实指定了标准库头文件的存在(虽然不完全是“头文件”),例如<iostream>
和<cstdio>
。
两种语言都有“翻译单元”的概念,这是一种或多种编译单元,稍后将它们链接在一起形成最终程序。在C++中,还有一个定义规则,它影响您可以将什么放入头文件与.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
文件中查找定义。