Qt Creator
编译过程做了什么
?
当我们按下运行按钮的时
,
其实
Qt Creator
编译器做了
5
件事情
对源文件进行预处理
,
生成预处理文件
对预处理文件进行编译
,
生成汇编文件
对汇编文件进行编译
,
生成二进制文件
对二进制文件进行链接
,
生成可执行文件
运行可执行文件
static
int
sum
(
int
num1
,
int
num2
);
static
int
sum
(
int
num1
,
int
num2
)
{
return
num1
+
num2
;
}
extern
int
sum
(
int
num1
,
int
num2
);
extern
int
sum
(
int
num1
,
int
num2
)
{
return
num1
+
num2
;
}
代码情缘
Qt Creator
编译过程验证
1.
编写代码
,
保存源文件
:
#include <stdio.h>
int
main
(){
printf
(
"hello lnj\n"
);
return
0
;
}
2.
执行预处理编译
执行预处理编译后生成的文件
打开预处理编译后生成的文件
处理源文件中预处理相关的指令
处理源文件中多余注释等
代码情缘
3.
执行汇编编译
执行汇编编译后生成的文件
打开汇编编译后生成的文件
代码情缘
4.
执行二进制编译
执行二进制编译后生成的文件
打开二进制编译后生成的文件
5.
执行链接操作
将依赖的一些
C
语言函数库和我们编译好的二进制合并为一个文件
代码情缘
执行链接操作后生成的文件
6.
运行链接后生成的文件
计算机是运算过程分析
1.
编写一个简单的加法运算
2.
调试编写好的代码
,
查看对应的汇编文件
代码情缘
结论
:
1.
通过地址线找到对应地址的存储单元
2.
通过控制线发送内存读取指令
3.
通过数据线将内存中的值传输到
CPU
寄存器中
4.
在
CPU
中完成计算操作
5.
通过地址线找到对应地址的存储单元
6.
通过控制线发送内存写入指令
7.
通过数据线将计算结果传输到内存中
预处理指令
预处理指令的概念
C
语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释
(
比如之前使用的
#include
文
件包含指令
)
,产生一个新的源程序
(
这个过程称为编译预处理
),
之后再进行通常的编译
为了区分预处理指令和一般的
C
语句,所有预处理指令都以符号
“#”
开头,并且结尾不用分号
代码情缘
预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾。习惯上我们尽
可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件
C
语言提供了多种预处理功能
,
如宏定义、文件包含、条件编译等。合理地使用预处理功能编写的程
序便于阅读、修改、移植和调试
,
也有利于模块化程序设计。