C语言中程序的环境和预处理简述

本文详细介绍了C语言程序的执行过程,包括翻译阶段的预编译、编译、汇编和链接四个步骤。预编译涉及宏定义、条件编译和头文件的处理,条件编译用于按需编译代码,防止空间浪费。预编译还包括处理文件包含,避免头文件的重复引用。接着,文章讲解了编译和汇编过程,以及链接时的符号表合并和重定位,最终形成可执行程序。
摘要由CSDN通过智能技术生成


程序是如何执行的?

有时候会问自己,程序的运行是那么简单的事情吗?
我鼠标点到 visual studio 上,程序就跑起来了,然后在界面就能看到我们想要看到的输出或者是我们不想看到的错误
实际上,程序的运行会经过一个复杂的阶段之后才会被执行

这个阶段就是翻译
在这里插入图片描述
而翻译中还有许多小步骤等着我们去实现

翻译

整个翻译的过程,可以分成两个大的步骤
分别是编译和链接
在这里插入图片描述
我们的源文件,通过编译器编译可以生成目标文件(.o为后缀名的二进制文件)
所有的源文件转换为目标文件后

随后使用链接器,将工程中的多个目标文件,以及头文件引入的标准库,链接生成一个可执行程序

编译本身可以分成多个步骤,分别是
预编译,编译和汇编
在这里插入图片描述
而每一步都有独特的作用

预编译

预编译,也叫编译预处理
预编译实现的是一种文本操作
他将 define 的宏定义替代
并且执行或者忽略条件编译
并且将头文件替换进到源文件中

举个简单的例子

#define MAX 100
int main()
{
   
	printf("%d",MAX);
	return 0;
}

其中 define 定义的 MAX 会在预编译的环节就被替换成100


int main()
{
   
	printf("%d",100);
	return 0;
}

相当于复制粘贴

条件编译

有时候,有一些代码我们不想让他们运行,但是又不想删除他们
为了不让他们占用我们的使用空间,我们可以有选择地去编译他们
C语言给了几个条件编译指令

编译指令 功能
#if A 若条件A成立则编译
#elif B 如果if A 不成立,elif B条件成立则进行编译
#else 当上述条件都不成立,就进行编译
#endif 结束条件编译
#ifdef DEFINE 如果定义了 DEFINE(可以是任意内容) 则进行编译
#ifndef DEFINE 如果没有定义 DEFINE,则进行编译
#define MAX 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值