C语言运行过程
来源:互联网 发布:linux web控制面板 编辑:程序博客网 时间:2024/06/05 07:28
如何正确编写C语言头文件和与之相关联的C源程序文件,这
首先就要了解它们的各自功能。 要理解C文件与头文件(即.h )有什么
不同之处,首先需要弄明白编译器的工作过程。
一般说来编译器会做以下几个过程:
1.预处理阶段
2. 编译阶段,首先编译成纯汇编语句,再将之汇编成跟 CPU 相关的二进
制码,生成各个目标文件 (.obj 文件)
3. 连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特
定平台相关的可执行文件。
编译器在编译时是以 C 文件为单位进行的,也就是说如果你的项目
中一个 C 文件都没有,那么你的项目将无法编译,连接器是以目标文件
为单位,它将一个或多个目标文件进行函数与变量的重定位,生成最终
的可执行文件 。
为了生成一个最终的可执行文件,就需要一些目标文件,也就是首先
要有 C 文件,而这些 C 文件中又需要一个 main () 函数作为可执行程序
的入口,那么我们就从 从这一个 C 文件入手,引入头文件概念。
假定这个 C 文件内容如下:
#include <stdio.h>
#include "mytest.h"
int main(int argc,char **argv)
{
test = 25;
printf("test ........... %d\n",test);
}
头文件"mytest.h"包含如下内容:
int test;
现在以这个例子来讲解编译器的工作:
1.预处理阶段:编译器以 C 文件作为一个单元,首先读这个 C 文件,发
现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两
个文件,找到之后,就会将相应头文件中 的宏,变量,函数声明,嵌套
的头文件包含等,进行 依赖关系 检测,并 进行宏替换,看是否有重复 声
明与定义的情况发生,最后将那些文件中所有的东东全部扫描进这个当
前的 C 文件中,形成一个中间"C 文件"
2.编译阶段,在上一步中相当于将第二 个头文件中的 test 变量扫描进了一
个中间 C 文件,那么 test 变量就变成了这个文件中的一个全局变量,此
时就将所有这个中间 C 文件的所有变量,函数分配空间,将各个函数编
译成二进制码,按照特定目标文件格式生成目标文件,在这种格式的目
标文件中进行各个全局变量,函数的符号描述,将这些二进制码按照一
定的标准组织成一个目标文件
3.连接阶段,将上一步成生的各个目标文件,根据一些参数,连接生成最
终的可执行文件,主要的工作就是重定位各个目标文件的函数,变量等,
相当于将个目标文件中的二进制码按一定的规范合到一个文件中。
首先就要了解它们的各自功能。 要理解C文件与头文件(即.h )有什么
不同之处,首先需要弄明白编译器的工作过程。
一般说来编译器会做以下几个过程:
1.预处理阶段
2. 编译阶段,首先编译成纯汇编语句,再将之汇编成跟 CPU 相关的二进
制码,生成各个目标文件 (.obj 文件)
3. 连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特
定平台相关的可执行文件。
编译器在编译时是以 C 文件为单位进行的,也就是说如果你的项目
中一个 C 文件都没有,那么你的项目将无法编译,连接器是以目标文件
为单位,它将一个或多个目标文件进行函数与变量的重定位,生成最终
的可执行文件 。
为了生成一个最终的可执行文件,就需要一些目标文件,也就是首先
要有 C 文件,而这些 C 文件中又需要一个 main () 函数作为可执行程序
的入口,那么我们就从 从这一个 C 文件入手,引入头文件概念。
假定这个 C 文件内容如下:
#include <stdio.h>
#include "mytest.h"
int main(int argc,char **argv)
{
test = 25;
printf("test ........... %d\n",test);
}
头文件"mytest.h"包含如下内容:
int test;
现在以这个例子来讲解编译器的工作:
1.预处理阶段:编译器以 C 文件作为一个单元,首先读这个 C 文件,发
现第一句与第二句是包含一个头文件,就会在所有搜索路径中寻找这两
个文件,找到之后,就会将相应头文件中 的宏,变量,函数声明,嵌套
的头文件包含等,进行 依赖关系 检测,并 进行宏替换,看是否有重复 声
明与定义的情况发生,最后将那些文件中所有的东东全部扫描进这个当
前的 C 文件中,形成一个中间"C 文件"
2.编译阶段,在上一步中相当于将第二 个头文件中的 test 变量扫描进了一
个中间 C 文件,那么 test 变量就变成了这个文件中的一个全局变量,此
时就将所有这个中间 C 文件的所有变量,函数分配空间,将各个函数编
译成二进制码,按照特定目标文件格式生成目标文件,在这种格式的目
标文件中进行各个全局变量,函数的符号描述,将这些二进制码按照一
定的标准组织成一个目标文件
3.连接阶段,将上一步成生的各个目标文件,根据一些参数,连接生成最
终的可执行文件,主要的工作就是重定位各个目标文件的函数,变量等,
相当于将个目标文件中的二进制码按一定的规范合到一个文件中。
0 0
- C语言运行过程
- C C语言程序的开发运行过程
- C语言中内存分布及程序运行加载过程
- 【C语言】函数运行过程-----栈帧调用
- C程序运行过程
- 解释运行c语言
- C语言编译过程
- C语言编译过程
- C语言编译过程
- C语言编译过程
- c语言编译过程
- C语言编译过程
- C语言编译过程
- C语言编译过程
- C语言编译过程
- c语言执行过程
- c语言编译过程
- C语言编译过程
- <数据结构与算法分析 C++描述>算法分析之最大子序列和问题
- codeforces-#287-- 507B Amr and Pins
- Add Two Numbers
- 编写出色CSS代码的13个建议
- 微商怎么做如何快速找客源做好微信朋友圈营销
- C语言运行过程
- Necklace of Beads
- android注册 登录+修改帐号密码+添加资料+给指定帐号充值
- Sybase总结
- libjpeg解压缩图像
- iOS开发-属性字符串NSAttributeString与NSString相互转换
- 致小黑君共勉
- Partition by Hash on Keys
- DBUS的 hello 消息