【C语言】程序编译链接详解

本文详细阐述了C语言程序从源代码到可执行程序的编译和链接过程,涉及预处理、编译、汇编等阶段,并介绍了程序的执行环境,包括内存加载、main函数调用和运行时栈的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、程序的翻译环境和执行环境

二、编译链接过程

2.1、程序编译过程

2.2、程序编译链接的阶段

2.2.1、预处理

2.2.2、编译

2.2.3、汇编

2.2.4、链接

2.2.5、整体过程

三、运行环境


一、程序的翻译环境和执行环境

在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选项  编译结束
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值