目录
一、程序的翻译环境和执行环境
在ANSI C的任何一种实现中,存在两个不同的环境
第一种是翻译环境(由编译器完成),在这个环境中源代码转换为可执行的机器指令。
第二种是执行环境,它用于执行代码
二、编译链接过程
2.1、程序编译过程
一个源文件要经过编译,链接才能形成可执行程序。因此每个源文件经过编译器处理生成目标文件,多个生成的目标文件和链接库经过连接器处理生成可执行程序。
在vs2019下编译器是cl.exe,链接器是link.exe
连接器同时也会引入标准C函数库中任何被该程序所用到的函数
2.2、程序编译链接的阶段
2.2.1、预处理
1、进行头文件的包含,将头文件的相关内容包含进test.i文件中。(#include预处理指令)
在Linux环境下,头文件放在/usr/include目录下。
2、define定义符号的替换(#define预处理指令)
3、去注释
[hx@VM-24-7-centos 20240120-编译链接]$ vim test.c
1 #include<stdio.h>
2
3 extern int Add(int,int);
4
5 //定义MAX的值
6 #define MAX 1000
7
8 int main()
9 {
10 int x=MAX;
11 int a=10;
12 int b=20;
13 int c=Add(a,b);
14 printf("%d\n",c);
15
16 return 0;
17 }
[hx@VM-24-7-centos 20240120-编译链接]$ gcc add.c -E -o add.i
[hx@VM-24-7-centos 20240120-编译链接]$ gcc test.c -E -o test.i
[hx@VM-24-7-centos 20240120-编译链接]$ ls
add.c add.i test.c test.i
### -E选项,让预编译后停下来
### -o选项 编译结束后把结果放到test.i文件中