简述C语言中.h文件和.c文件作用和区别

在c语言学习过程中,对.h文件和.c文件不甚了解,参考其他资料后对它进行简要分析:

  • .h文件和.c文件作用
  • 使用.h文件和.c文件的原因

.h文件和.c文件作用

  • xx.h文件 .h中一般放的是同名.c文件中定义的变量、数组、函数的声明,需要让.c外部使用的声明。
  • xx.c文件 .c文件一般放的是变量、数组、函数的具体定义

使用.h文件和.c文件的原因

  • 使用.h文件和.c文件的原因主要是为了解决文件编译时重复声明即声明变更繁杂的问题

“在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代,那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在很多.c(.cpp)文件中的声明语句就是相同的,但他们却不得不一个字一个字地重复地将这些内容敲入每个.c(.cpp)文件。但更为恐怖的是,当其中一个声明有变更时,就需要检查所有的.c(.cpp)文件。 
于是人们将重复的部分提取出来,放在一个新文件里,然后在需要的.c(.cpp)文件中敲入#include XXXX这样的语句。这样即使某个声明发生了变更,也再不需要到处寻找与修改了。因为这个新文件,经常被放在.c(.cpp)文件的头部,所以就给它起名叫做“头文件”,扩展名是.h。 
在我们语言的初学阶段,往往我们的程序只有一个.c的文件或这很少的几个,这时我们就很少遇到头文件组织这个头疼的问题,随着我们程序的增加,代码 量到了几千行甚至几万行,文件数也越来越多。这时这些文件的组织就成了一个问题,其实说白了这些文件的组织问题从理论上来说是软件工程中的模块设计等等的问题。” —— [ 引自“C 语言项目中.h文件和.c文件的关系” ]

要更深入理解这个问题我们需要对编译器原理有一定理解,编译器的作用是将程序代码转换成机器能够直接执行的机器码。主要有以下四个过程:

1.头文件的预编译,预处理

  编译器在编译源代码时,会先编译头文件,保证每个头文件只被编译一次。

  在预处理阶段,编译器将c文件中引用的头文件中的内容全部写到c文件中。

2.词法和语法分析(查错)

3.编译(汇编代码,.obj文件)

转化为汇编码,这种文件称为目标文件。后缀为.obj。

4.链接(二进制机器码,.exe文件)

  将汇编代码转换为机器码,生成可执行文件。

在编译过程中,.h文件中的所有内容会被写到包含它的.c文件中,而所有的.c文件以一个共同的main函数作为可执行程序的入口。 
在.h文件中编写函数实现依然可以正常编译执行,相当于所有.h的内容最后都被写到了main.c文件中。但是为了逻辑性、易于维护性以及一些其他目的,一般在.h文件中写函数的声明,在.c文件中编写函数的实现。

C语言后缀.h文件和.c文件作用和区别相关推荐

  1. C语言math.h库函数中atan与atan2的区别

    今天做图像旋转练习的时候,要根据鼠标的移动轨迹来确定转过的角度,于是就很自然的想到通过三个点来确定这个转过的角度:图像的中心,鼠标按下的点,鼠标拖到的点.想到使用斜率来计算角度,于是联想到数学公式中的 ...

  2. c语言math.atan,C语言math.h库函数中atan与atan2的区别

    今天做图像旋转练习的时候,要根据鼠标的移动轨迹来确定转过的角度,于是就很自然的想到通过三个点来确定这个转过的角度:图像的中心,鼠标按下的点,鼠标拖到的点.想到使用斜率来计算角度,于是联想到数学公式中的 ...

  3. c语言中引用头使用什么指令,在源文件(.c)和头文件(.h)中声明和定义的区别——C语言...

    最近在看多文件编程的时候遇到的一个问题,本来以为理解了声明和定义的区别(然而并没有····),也算是重新认识了一次声明和定义,下面上代码 声明和定义:有分配空间的叫定义,没分配空间的叫声明 定义:表示 ...

  4. 嵌入式C语言编程——.h文件与.c文件

    .h文件与.c文件的关系 参考高手的程序时,发现别人写的严格的程序都带有一个"KEY.H",里面定义了.C文件里用到的自己写的函数,如Keyhit().Keyscan()等..H文 ...

  5. 知识贴!单片机C语言编程之.H文件与.C文件的关系

    一..H文件与.C文件的关系: 迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也不知道.H文件到底什么用,与.C文件什么关系.只是最近写键盘程序,参考别人的程序时,发现别人写 ...

  6. 单片机C语言编程:.H文件与.C文件的关系!

    一个.C文件对应一个.H文件是一种良好的编程习惯,那么.C和.H文件之间的关系是怎么样的呢? 一..H文件与.C文件的关系: 迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也 ...

  7. c语言windows.h头文件详解

    如果c语言库里没有某个头文件 只需要将下好的头文件放入下面的路径即可 windows.h头文件包含的函数及其用法 1.GetAsyncKeyState()()//通过函数来判断按键按下的状态 主要用法 ...

  8. c语言中的头文件stdlib.h的作用,c语言includestdlib.h什么意思?

    c语言"include"的意思是:头文件即"standard library"标准库头文件.该文件包含了的C语言标准库函数的定义"stdlib&quo ...

  9. c语言源程序连接后生成,c语言源程序经过编译后,生成文件的后缀是什么?_后端开发...

    c语言如何求n个数的平均值?_后端开发 c语言求n个数平均值的方法:1.定义一个数组存放n个数,然后将数组中的数相加求和.2.用得到的求和结果除以n(数组中数字的个数)即可. C语言源文件后缀名是.c ...

最新文章

  1. 从 Android 静音看正确的查bug的姿势?
  2. 总结 | 一些关于 CPU 的基本知识
  3. java做一个客房管理系统定制_Java实现酒店客房管理系统
  4. android gpio操作
  5. boost::multiprecision模块float128相关的测试程序
  6. mac下使用n管理node版本
  7. HDU1166-敌兵布阵
  8. python(9)-变量、input函数
  9. Vuex原来可以这样上手
  10. 被迷惑了,两个不相关的文件也有相同的地方
  11. CWnd的派生类-1、CFrameWnd类
  12. Ubuntu安装ssh server及分配用户
  13. grep awk sed 练习题
  14. PostgreSQL使用pgAdmin3不能编辑表里的数据
  15. 基于鱼群算法的函数寻优
  16. 2020年全球锂电池电芯产值将超过3400亿元
  17. matlab教程 振动,Matlab振动程序-代码作业
  18. ews java 新建邮箱_通过EWS JAVA API订阅邮箱更新
  19. 【offerMe--面经必备】---京东面经分享(包含答案)
  20. 一个int类型到底占多少个字节

热门文章

  1. python莱布尼茨法计算π_python圆周率计算(带进度条)
  2. 雕刻效果的实现【OpenCV+QT】
  3. 如何对matlab中的数组取平均值
  4. C语言项目案例分析 源代码
  5. Webpack 4教程 - 第四部分,使用SplitChunksPlugin分离代码
  6. HDFS fsimage和edits中的文件信息查看
  7. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:08 自然语言处理中的机器学习方法
  8. hdu4416[多串后缀自动机]
  9. 点到超平面的距离公式推导
  10. c语言图片加水印,[求助]C语言 bmp文件加上水印