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