程序是如何执行的?
有时候会问自己,程序的运行是那么简单的事情吗?
我鼠标点到 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