C语言中.c和.h文件的区别
一、区别:
从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文件的区别相关推荐
- C语言中 .c 和 .h 文件有什么关系?
在嵌入式开发中,通常会使用C语言编写程序. C语言的程序通常被分成两个文件:.c文件和.h文件. 文章目录 一.是什么 ? 二.怎么做 ? 总结 一.是什么 ? .c文件包含了程序的实现部分,其中包含 ...
- c语言中的stdbool.h头文件,【C语言】中的stdbool.h头文件
C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...
- C语言中:在头文件中使用static定义变量意味着什么?
C语言中:在头文件中使用static定义变量意味着什么? 看到有一位同学在头文件中这么写: static const wchar_t* g_str1 = - static const wchar_t* ...
- C语言中的sizeof()和strlen()的区别
C语言中的sizeof和strlen的区别 sizeof() strlen 大量案例(想深入了解可以看) 1.(花括号int的sizeof()) 2.(花括号char的sizeof()) 3.(字符串 ...
- c语言gets和getchar区别,C语言中 gets 和 getchar 有什么区别
C语言中 gets 和 getchar 有什么区别 发布时间:2020-07-22 09:14:29 来源:亿速云 阅读:81 作者:Leah 这期内容当中小编将会给大家带来有关C语言中 gets 和 ...
- C语言中fun1()和fun2(void)的区别
C语言中fun1()和fun2(void)的区别 在一次C语言实训中我发现老师在对无参函数的书写中写成fun2(void)的形式,这引起了我的好奇心,我只知道fun1()和fun2(void)是两个无 ...
- C语言中 *.c和*.h文件的区别!
C语言中 *.c和*.h文件的区别! 这是HR面试我的一道题,没技术上含量,不过细想起来,还是C语言的最基本的知识!俗话说,目标决定动力,细节决定成败! C文件就是C语言系列的源文件,而H文 ...
- .c和.h文件的区别(转载)
一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...
- .c和.h文件的区别
一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...
最新文章
- 操作系统学习笔记 第四章:存储器管理(王道考研)
- mysql免费框架_瞧一瞧~看一看~MyCat架构剖析免费不要钱!(上)
- 多态部分作业 1.按要求编写Java程序:(1)编写一个接口:InterfaceA,只含有一个方法int method(int n);
- 科学计算机eq7,科学计算器HiEdu 580 Scientific Calculator
- ​Nat. Commun.速递:深度学习在计算生物学中的应用综述
- 【转】AB实验设计思路及实验落地
- jquery-ui-拖
- 让人想骂街的 Python 炫技操作:条件语句的七种写法
- DICOM开发工具总结
- React17事件委托的变更
- 16.Mongodb之预写日志(Journaling)
- CS 61A Spring 2019 HW01 学习笔记
- 开心网kaixin001状告kaixin,停用“开心网”名称,赔偿1000万元并公开道歉
- 前端项目:基于Nodejs+vue开发实现高校学院网站系统
- FPGA|VGA的8色彩条的实现
- 后浪HTML5推前浪Flash:2020,为何大家都不支持Flash了?
- 数据库怎么设计字典表
- 计算机安全的基本要求是什恶魔,公考面试真题:2018年3月17日银监会(计算机岗)面试真题1...
- 惊呆了!北大博士当了城管
- IEC60950测试和电子电器安规测试设备
热门文章
- 湖南邮储银行计算机类的是不是不要看金融知识,邮储银行湖南省分行开展普及金融知识万里行活动...
- Android 中屏幕进行横屏显示和竖屏显示的方法
- vue中v-model使用方法
- 视频知识点(21)- FLV视频格式入门必看
- python接入巴法云,TCP协议,MQTT协议示例
- 系统架构设计——高安全系统架构
- L1-052 2018我们要赢 (5分)
- python入门:NO.9 input函数
- SpringMVC(一)MVC设计模式
- python注释掉一段代码_python将一段程序无效掉的方法