C语言中头文件和源文件的关系
答案
#include预处理实际上就是完成了一个“复制代码并插入”的工作!
编译器工作阶段
1.预处理
2.词法和语法分析
3.编译(高级语言——汇编语言——二进制码——目标文件.obj)
4.连接(生成可执行文件.exe)
编译器各阶段工作工作过程
1.预处理阶段:
编译器以C文件作为一个单元,开始读C文件,读到包含头文件的语句时,从所有搜索路径寻找头文件。
找到后,处理宏,变量,函数声明,检测依赖关系,进行宏替换,检查是否有重定义和声明,最后将头文件中的东西扫描进当前C文件中,形成“中间C文件”。
2.编译阶段
将各个函数编译成二进制码,按照特定格式生成目标文件.obj
3连接阶段
将各个目标文件,连接最终生成可执行文件
为什么在头文件进行函数,变量和宏的声明,而在C文件进行变量定义,函数实现?
1.在头文件实现函数体的话,如果在多个C文件中引用,且同时编译多个C文件,那么在连接成可执行文件时,如果这段函数没有定义成局部函数,就会出现函数的多重定义错误
2.如果在头文件定义全局变量,并且赋初值。那么多个引用此头文件的C文件中存在相同变量名的copy,由于已经赋初值,所以每个copy都会分配一个空间,那么在最终连接阶段,会在DATA段存在多个相同变量;假设没有赋初值,则编译器会将这个变量放在BSS段,连接器对BSS段的多个同名变量仅分配一个存储空间。
3.如果在C文件中声明宏,结构体,函数等,那么在另一个C文件中引用相同的宏,结构体,就必须再做重复工作。且改动时需要分别都改动,不如放在头文件中统一改动。
4.在头文件中声明结构,函数等,当想把代码封装成库,又不想开源时,可以在头文件中写函数声明和用法。
5.使用头文件还可以避免函数的声明和定义的次序问题
静态链接和动态链接
静态链接 :.h+.lib(编译器将.cpp文件编译成.lib库文件,接口对外,实现代码不可见)
动态链接:.h+.cpp
C语言中头文件和源文件的关系相关推荐
- 什么是c 语言中源文件,C++中头文件和源文件详细介绍
C++中的头文件和源文件详解 一.C++编译模式 通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称 ...
- C语言中头文件和源文件的注意事项
C语言中头文件和源文件的注意事项 文章目录 C语言中头文件和源文件的注意事项 0.前言 1.实现步骤 1.1 拆分前 1.2 拆分后 2.总结 2.1头文件内容 2.2 源文件(.c)内容 2.3 函 ...
- c语言头文件和源文件为什么分开,C语言中为什么要头文件和源文件分开写
对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写.一般都是代表一个基本功能的源文件引用相应的头文件. 一个 相关功能的模块可能有若干对源文件和头文件组成.这是基于组件编程的核心. ...
- C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用
1. C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件: .cpp 文件,被称作 C++ 源文件,里面放的都是 C++ 的源代码 .h 文件,被称作 C++ 头文件,里面放的也是 C++ ...
- 详解C语言中头文件的作用
大家好,先做个自我介绍,我是天蓬,欢迎阅读本篇博文. 由于本人理解能力不是很好,阅读他人文章时,常常看得晕头晕脑,这让我很是头疼,我想,世界上一定还有和我一样的人(哈哈,不是说你么笨哦).所以,我将会 ...
- C语言头文件和源文件差异,#include两种引用方式差异
一些初学c语言的人,不知道头文件(*.h文件)原来还可以自己写的.只知道调用系统库函数时,要使用#include语句将某些头文件包含进去.其实,头文件跟.c文件一样,是可以自己写的.头文件是一种文本文 ...
- C++中的头文件和源文件:如何写头文件
C++中的头文件和源文件 转自:博客园http://www.cnblogs.com/lidabo/archive/2012/04/17/2454568.html 一.C++编译模式 通常,在一个C++ ...
- C++中头文件和源文件详细介绍
C++中的头文件和源文件详解 一.C++编译模式 通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称 ...
- 理解 C++ 中的头文件和源文件的作用
一.C++ 编译模式 通常,在一个 C++ 程序中,只包含两类文件-- .cpp 文件和 .h 文件.其中,.cpp 文件被称作 C++ 源文件,里面放的都是 C++ 的源代码:而 .h 文件则被称作 ...
- C++中的头文件和源文件
一.C++编译模式 通常,在一个C++程序中,只包含两类文件--.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是C ...
最新文章
- 状态机系列学习笔记01
- python程序实例教程基础-编程小案例
- Java线程(二):线程同步synchronized和volatile
- python爬虫网络请求超时是什么意思_python爬虫怎么处理异常和超时?
- Django的ModelForm
- api过滤器_了解播放过滤器API
- Java线程—如何解决Swing的单线程问题-----------Swing线程机制
- 小红书如何实现高效推荐?解密背后的大数据计算平台架构
- 动手设计 CPU(一)—— 各类元件功能表
- CMU 15-213 Introduction to Computer Systems学习笔记(22) Synchronization: Advanced
- 产品选型“神器” TIA Selection Tools 之选择 S7-1500T 全程详解
- android搜狗离线安装包,搜狗翻译离线版下载
- 浏览器主页被篡改怎么办
- 师太、老衲、贫道的爱恨全集
- Ibeacon一维小项目
- 学之思开源考试系统 - 数据库设计文档
- c语言处理nc程序,NC程序的语言问题
- Al-learing数学基础,平均差,方差,协方差
- Flutter 设置 App 的主色调与字体
- 8000字34张图史诗级介绍同轴电缆、双绞线、光纤等线缆,超级详细!