没有合适的资源?快使用搜索试试~ 我知道了~
源代码的转换、加载与运行(系统阐述源代码是怎样再计算机中变为可以执行的程序)
需积分: 5 1 下载量 115 浏览量
2023-10-30
18:52:04
上传
评论
收藏 1.52MB PDF 举报
温馨提示
试读
27页
本资源主要讲述了源代码的转换、加载与运行,从源代码的预处理到编译、汇编、链接,整体阐述了源代码是怎样再计算机中变为可以执行的程序,可执行程序怎样加载并运行的整体流程。减少长篇大论的理论,以一个例子从头贯穿到尾,并配以插图。 适用人群:对于想了解代码的转变过程的读者是一份很好的参考,对于从事C/C++开发的读者来说更是不可或缺的基础,可以帮助在代码开发过程中的很多bug有一个清除的认知。
资源推荐
资源详情
资源评论
源
代
码
的
转
换
、
加
载
与
运
⾏
1.
源
代
码
.c
⽂
件
是
如
何
转
换
为
可
执
⾏
程
序
的
?
⼤多
数
编
译
系
统
提
供
编
译
器
驱
动
程
序
,
它
可
以
调
⽤
语
⾔
预
处
理
器
、
编
译
器
、
汇
编
器
和
链
接
器
,
下
⾯
将
详
细
介
绍
每
⼀
步
骤
的
具
体
⼯
作
。
test.h
int sum(int n);
1
main.c
#include "test.h"
#include <stdio.h>
//
定
义
宏
#define NUM 3
int t = 1;
int main(){
printf("NUM = %d", NUM);
// printf("NUM = %f", NUM);
// printf("NUM = %f", NUM);
// printf("NUM = %f", NUM);
int val = sum(2);
return val;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sum.c:
#include <stdio.h>
int sum(int n){
int s = n + n;
return s;
}
1
2
3
4
5
6
在
上
⾯
两个
程
序
中
,
main.c
会
调
⽤
sum.c
来
处
理
元
素
,
下
图
是
⼀个
整
体
的
流
程
:
1.1
驱
动
程
序
⾸
先
运
⾏
C
预
处
理
器
(
cpp
)
在
这
⼀
步
中
,
C
预
处
理
器
将
main.c
⽂
件
翻
译
成
⼀个中
间
⽂
件
main.i
;
它
主
要
做
了下
⾯
的
3
个
⼯
作
:
使
⽤
如
下
命
令
将
main.c
翻
译
为
main.i
:
[root@localhost mainAndSum]
# gcc -E main.c -o main.i
1
•
头
⽂
件
展
开
:
将
源
代
码
中
所
有
#include
引
⽤
的
头
⽂
件
拷
⻉
到
当
前
代
码
中
来
main.i
⽂
件
:
•
宏
替
换
:
在
代
码
中
替
换
所
有
的
宏
为
具
体
的
值
;
可
以
看
到
预
处
理
过
后
我
们
所
定
义
的
SUM
已
经
不
⻅
了
,
相
反
在
打
印
阶
段
⾥
的
SUM
被
替
换
成
了
3.1415926
,
这
就
是
所
谓
的
宏
替
换
。
•
去
注
释
:
注
释
内
容
变
为
空
格
1.2
驱
动
程
序
运
⾏
编
译
器
(
cc1
)
在
这
个
过
程
中
,
C
编
译
器
,
它
将
main.i
⽂
件
翻
译
为
汇
编
语
⾔
⽂
件
main.s
;
这
⾥
主
要
进
⾏
词
法
分
析
、
语
义
分
析
、
语
法
分
析
等
⼯
作
,
检查
是
否
符
合
C
的
语
法
。
使
⽤
下
⾯
命
令
可
以
将
main.i
或
mian.c
⽂
件
翻
译
为
main.s
⽂
件
:
[root@localhost mainAndSum]
# gcc main.i -Og -o main.s -S
1
错
误
代
码
(
宏
后
⾯
加
了
';'
)
:
#include "test.h"
#include <stdio.h>
//
定
义
宏
#define NUM 3;
int main(){
printf("NUM = %d", NUM);
// printf("NUM = %f", NUM);
// printf("NUM = %f", NUM);
// printf("NUM = %f", NUM);
int val = sum(2);
return val;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
经
过
预
编
译
器
处
理
可
以
看
到
,
宏
已
经
被
替
换
,
但
没
有
报
错
:
经
过
编
译
器
处
理
,
报
错
:
[root@localhost mainAndSum]# gcc mainError.c -Og -o mainError.s -S
mainError.c: In function ‘main’:
mainError.c:3:14: error: expected ‘)’ before ‘;’ token
#define NUM 3;
^
mainError.c:6:26: note: in expansion of macro ‘NUM’
printf("NUM = %d\n", NUM);
^
1
2
3
4
5
6
7
8
下
⾯
是
main.c
正
确
代
码
经
过
编
译
器
处
理
后
得
到
的
汇
编
语
⾔
⽂
件
main.s:
剩余26页未读,继续阅读
资源评论
21岁被迫秃头
- 粉丝: 2w+
- 资源: 26
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功