一、区别:

从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一般只用来放声明,而放不定义,参见拙著“过马路,左右看”)也无害处,又不会影响编译,何乐而不为呢?翻回头再看上面的3个问题,很好解答了吧?

二、编译器编译C语言的流程:

1.预处理阶段:编译器以C文件作为一个单元,首先读这个C文件,发现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两个文件,找到之后,就会将相应头文件中再去处理宏,变量,函数声明,嵌套的头文件包含等,检测依赖关系,进行宏替换,看是否有重复定义与声明的情况发生,最后将那些文件中所有的东东全部扫描进这个当前的C文件中,形成一个中间“C文件”。

2.编译阶段,在上一步中相当于将那个头文件中的test变量扫描进了一个中间C文件,那么test变量就变成了这个文件中的一个全局变量,此时就将所有这个中间C文件的所有变量,函数分配空间,将各个函数编译成二进制码,按照特定目标文件格式生成目标文件,在这种格式的目标文件中进行各个全局变量,函数的符号描述,将这些二进制码按照一定的标准组织成一个目标文件。

3.连接阶段,将上一步成生的各个目标文件,根据一些参数,连接生成最终的可执行文件,主要的工作就是重定位各个目标文件的函数,变量等,相当于将个目标文件中的二进制码按一定的规范合到一个文件中 。

参考链接:https://www.jianshu.com/p/7a5815d92afa

C语言中.c和.h文件的区别相关推荐

  1. C语言中 .c 和 .h 文件有什么关系?

    在嵌入式开发中,通常会使用C语言编写程序. C语言的程序通常被分成两个文件:.c文件和.h文件. 文章目录 一.是什么 ? 二.怎么做 ? 总结 一.是什么 ? .c文件包含了程序的实现部分,其中包含 ...

  2. c语言中的stdbool.h头文件,【C语言】中的stdbool.h头文件

    C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...

  3. C语言中:在头文件中使用static定义变量意味着什么?

    C语言中:在头文件中使用static定义变量意味着什么? 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const wchar_t* ...

  4. C语言中的sizeof()和strlen()的区别

    C语言中的sizeof和strlen的区别 sizeof() strlen 大量案例(想深入了解可以看) 1.(花括号int的sizeof()) 2.(花括号char的sizeof()) 3.(字符串 ...

  5. c语言gets和getchar区别,C语言中 gets 和 getchar 有什么区别

    C语言中 gets 和 getchar 有什么区别 发布时间:2020-07-22 09:14:29 来源:亿速云 阅读:81 作者:Leah 这期内容当中小编将会给大家带来有关C语言中 gets 和 ...

  6. C语言中fun1()和fun2(void)的区别

    C语言中fun1()和fun2(void)的区别 在一次C语言实训中我发现老师在对无参函数的书写中写成fun2(void)的形式,这引起了我的好奇心,我只知道fun1()和fun2(void)是两个无 ...

  7. C语言中 *.c和*.h文件的区别!

    C语言中 *.c和*.h文件的区别!      这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文 ...

  8. .c和.h文件的区别(转载)

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  9. .c和.h文件的区别

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

最新文章

  1. 操作系统学习笔记 第四章:存储器管理(王道考研)
  2. mysql免费框架_瞧一瞧~看一看~MyCat架构剖析免费不要钱!(上)
  3. 多态部分作业 1.按要求编写Java程序:(1)编写一个接口:InterfaceA,只含有一个方法int method(int n);
  4. 科学计算机eq7,科学计算器HiEdu 580 Scientific Calculator
  5. ​Nat. Commun.速递:深度学习在计算生物学中的应用综述
  6. 【转】AB实验设计思路及实验落地
  7. jquery-ui-拖
  8. 让人想骂街的 Python 炫技操作:条件语句的七种写法
  9. DICOM开发工具总结
  10. React17事件委托的变更
  11. 16.Mongodb之预写日志(Journaling)
  12. CS 61A Spring 2019 HW01 学习笔记
  13. 开心网kaixin001状告kaixin,停用“开心网”名称,赔偿1000万元并公开道歉
  14. 前端项目:基于Nodejs+vue开发实现高校学院网站系统
  15. FPGA|VGA的8色彩条的实现
  16. 后浪HTML5推前浪Flash:2020,为何大家都不支持Flash了?
  17. 数据库怎么设计字典表
  18. 计算机安全的基本要求是什恶魔,公考面试真题:2018年3月17日银监会(计算机岗)面试真题1...
  19. 惊呆了!北大博士当了城管
  20. IEC60950测试和电子电器安规测试设备

热门文章

  1. 湖南邮储银行计算机类的是不是不要看金融知识,邮储银行湖南省分行开展普及金融知识万里行活动...
  2. Android 中屏幕进行横屏显示和竖屏显示的方法
  3. vue中v-model使用方法
  4. 视频知识点(21)- FLV视频格式入门必看
  5. python接入巴法云,TCP协议,MQTT协议示例
  6. 系统架构设计——高安全系统架构
  7. L1-052 2018我们要赢 (5分)
  8. python入门:NO.9 input函数
  9. SpringMVC(一)MVC设计模式
  10. python注释掉一段代码_python将一段程序无效掉的方法