很多时候,当我看到其他人的代码时,我看到有些代码包含.h文件,有些则包含.c / .cpp文件。有什么区别?
答案 0 :(得分:7)
取决于文件中的内容。
#include
预处理程序指令只是在原始文件中插入引用的文件。
那么实际的编译器阶段(在预处理器之后运行)看到的是所有插入的结果。
标头文件通常是通过#include
设计并打算使用的。源文件不是,但它有时是有道理的。例如,如果您的C文件只包含定义和初始化程序:
const uint8_t image[] = { 128, 128, 0, 0, 0, 0, ... lots more ... };
然后使用#include
使某些代码可以使用它是有意义的。它是一个C文件,因为它实际上定义(不仅仅是声明)一个变量。也许它保存在自己的文件中,因为图像从用于编辑的其他(图像)格式转换为C源。
答案 1 :(得分:2)
来源 - http://cboard.cprogramming.com/c-programming/60805-difference-between-h-c-files.html
答案 2 :(得分:1)
你可以看一下gcc网站(https://gcc.gnu.org/onlinedocs/gcc/Invoking-G_002b_002b.html),它报告了你可以在C / C ++中使用的所有扩展的一个很好的总结:
C ++源文件通常使用后缀“.C”,“。cc”,“。cpp”,“。CPP”,“。c ++”,“。cc”或“.cxx”之一; C ++头文件通常使用'.hh','。hpp','。H'或(对于共享模板代码)'。tcc';和预处理的C ++文件使用后缀'.ii'。 GCC识别具有这些名称的文件并将它们编译为C ++程序,即使您以与编译C程序相同的方式调用编译器(通常使用名称gcc)。
答案 3 :(得分:1)
包含带声明的头文件是在项目中进行一致声明的主要,推荐和几乎在任何地方使用的方法。包含另一个源文件是另一种(非常罕见的)野兽,它在特定条件下是有用的和可能的:
static
,但包含哪个版本受编译选项的约束。另一种变体是规模和/或维护凭证问题。在这里,我使用术语定义和声明,其方式如下:
extern int qq;
void f(int);
#define MYDATATYPE double
以下是定义:
int qq; // here, the variable is allocated and exported
void f(int x) { printf("%d\n", x); } // the same for function
(另外,声明包括在类定义中声明了主体的C ++方法。)
无论如何,案件是另一个.c / .cxx /等。文件包含在源文件中是非常混乱的,应该避免直到非常真实的需要。有时,特定后缀(例如.tpl)用于此类文件,以避免读者混淆。