c文件和头文件

smallcracker 2021-01-29 00:00:00
Categories: Tags:

关于怎样写c文件和头文件

c语言的编译过程

预处理

预处理主要处理

1.源程序的宏定义指令

2.条件编译指令

3.头文件包含指令

编译

将源程序转换为汇编代码

汇编

将汇编语言代 码转化成机器语言

链接

将各个目标文件中的各段代码进行绝对定位,生成根特定平台相关的可执行文件。(就是生成.exe文件)

那么.h 和 .c 文件怎么用呢?

看如下例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//a.h
void foo();

//a.c
#include "a.h"
void foo()
{
return;
}

//main.c
#include "a.h"
int main(int argc, char *argv[])
{
foo();
 return 0;
}

现在来看一个大佬的解释:

从C编译器角度看,.h和.c皆是浮云,就是改名为.txt、.doc也没有大的分别。换句话说,就是.h和.c没啥必然联系。.h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。这个声明有啥用?只是让需要用这些声明的地方方便引用。 因为 #include “xx.h” 这个宏其实际意思就是把当前这一行删掉,把 xx.h 中的内容原封不动的插入在当前行的位置。由于想写这些函数声明的地方非常多(每一个调用 xx.c 中函数的地方,都要在使用前声明一下子),所以用 #include “xx.h” 这个宏就简化了许多行代码——让预处理器自己替换好了。也就是说,xx.h 其实只是让需要写 xx.c 中函数声明的地方调用(可以少写几行字),至于 include 这个 .h 文件是谁,是 .h 还是 .c,还是与这个 .h 同名的 .c,都没有任何必然关系。
这样你可能会说:啊?那我平时只想调用 xx.c 中的某个函数,却 include了 xx.h 文件,岂不是宏替换后出现了很多无用的声明?没错,确实引入了很多垃圾 ,但是它却省了你不少笔墨,并且整个版面也看起来清爽的多。鱼与熊掌不可得兼,就是这个道理。反正多些声明(.h一般只用来放声明,而放不定义,参见拙著“过马路,左右看”)也无害处,又不会影响编译,何乐而不为呢?