头文件和源文件的区别

头文件和源文件在本质上没有任何区别。 只不过一般:后缀为 .h 的文件是头文件,内含函数声明、宏定义、结构体定义等内容。后缀为 .c 的文件是源文件,内含函数实现,变量定义等内容。而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的文件采取某些动作。这样分开写成两个文件是一个良好的编程风格。

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程:

①预处理阶段

②词法与语法分析阶段

③ 编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制机器码,生成各个目标文件 (.obj文件)

④连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关 的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格 式信 息。(生成.exe文件)

编译器在编译时是以C文件为单位进行的,也就是说如果你的项目中一个C文件都没有,那么你的项目将无法编译,连接器是以目标文件为单位,它将一个或多个目标文件进行函数与变量的重定位,生成最终的可执行文件,在PC上的程序开发,一般都有一个main函数,这是各个编译器的约定。

(main .c文件 目标文件obj 可执行文件exe )

有了这些基础知识,再言归正传,为了生成一个最终的可执行文件,就需要一些目标文件,也就是需要C文件,而这些C文件中又需要一个main函数作为可执行程序的入口,那么我们就从一个C文件入手,假定这个C文件内容如下:#include "mytest.h"

int main(int argc,char **argv)

{

test = 25;

printf("test.................%d/n",test);

}

头文件内容如下:

int test;

现在以这个例子来讲解编译器的工作:

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

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

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

更多web开发知识,请查阅 HTML中文网 !!

html 头文件含义,头文件和源文件的区别是什么?相关推荐

  1. C++中头文件(.h)和源文件(.cpp)都应该写些什么,头文件中的预编译语句作用,命名空间和头文件的区别与联系,内部链接和外部链接

    1. C++中头文件(.h)和源文件(.cpp)都应该写些什么: 总结下来就是头文件写的就是类的声明(包括类里面的成员和方法的声明)和函数的声明,但一般来说不写出具体的实现.对应的同名(可以不同名,但 ...

  2. C++ 中头文件(.h)和源文件(.cc)的写法简述

    C++ 中头文件(.h)和源文件(.cc)的写法简述 用C++编写比较大型的项目时,文件的分割管理确实确实是非常必要的 .下面就非常简洁明了地谈谈头文件(.h)和源文件(.cc)应该怎么写. 头文件( ...

  3. C++中头文件(.h)和源文件(.cpp)都应该写些什么

    原文出处:https://www.cnblogs.com/fenghuan/p/4794514.html 头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等, ...

  4. C++中对于类来说头文件(.h)和源文件(.cpp)都应该写些什么 (类的常规创建)

      头文件(.h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体的实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句(如下 ...

  5. C++中的头文件(.h)和源文件(.cc)

    头文件(,h): 写类的声明(包括类里面的成员和方法的声明).函数原型.#define常数等,但一般来说不写出具体实现. 在写头文件时需要注意,在开头和结尾处必须按照如下样式加上预编译语句: #ifn ...

  6. C++ 头文件和源文件

    from:https://www.cnblogs.com/fenghuan/p/4794514.html C++中头文件(.h)和源文件(.cpp)都应该写些什么 头文件(.h): 写类的声明(包括类 ...

  7. C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用

    1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...

  8. c 中头文件和源文件的区别是什么

    区别:头文件是".h"文件,提供接口:源文件是".cpp"文件,提供实现.编译器规定源文件必须包含函数入口,即main函数:而头文件不得包含函数入口,头文件不可 ...

  9. C++头文件和源文件,编译过程

    源文件如何根据#include来关联头文件  1.系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找. #include <xxx.h> 2.用户自定义的文件用双引号括起来, ...

最新文章

  1. 关于 UDP Hole Punching 的资料
  2. mybatis中传入参数的几种方式
  3. maven jetty运行时,js无法保存
  4. Google AJAX 搜索 API
  5. LAMP下http跳转到 https
  6. c++ 深度拷贝和浅度拷贝
  7. bash大括号参数扩展(Parameter Expansion)
  8. html怎么快捷复制粘贴,如何快速复制粘贴 最全复制粘贴攻略教程大全
  9. 分享|2022城市大脑发展白皮书(附PDF)
  10. python求解一元二次方程考虑复数_Python学习笔记:求解一元二次方程
  11. jqwidgets简单技术
  12. mysql创建表格例子_Mysql创建表例子 | restcy 技术博客
  13. 剑指Offer(二):替换空格
  14. C++ MFC 文字转语音
  15. 2017西安网络赛B_Coin
  16. hdu-5643 King's Game(打表)
  17. 三星内存编码_三星内存编号命名揭秘
  18. K8s落地实践之旅 —— Pod(豌豆荚)
  19. JDK1.8特性之StringJoiner
  20. 《大数据之路:阿里巴巴大数据实践》-第2篇 数据模型篇 -第8章 大数据领域建模综述

热门文章

  1. C#---S7.Net编写PLC通讯(从资源安装到功能实现)附代码
  2. 【CTF】-Crypto练习日志8.1
  3. TextRank中文,英文关键词提取
  4. 对《侃侃那些美丽的编程语言(上)》的集中回复
  5. GPS电子围栏如何触发进出围栏报警,GPS定位系统又是如何管理的
  6. vue组件隔代通信(爷爷组件与孙子组件通信)
  7. 基于FPGA 的图像缩放算法设计
  8. Gbase 8a GDCA考试真题100%
  9. 美国一男子从移动电话基站跳伞死亡
  10. Python 使用dpkt提取五元组