C语言虽然很简单,但他的设计者设计时是按照能做大事的语言设计的。——刘福岩
C/C++无疑是简单粗暴的,这样的简单粗暴也造就了它的高效性,这篇文章我们就来简单谈谈C/C++的编译过程和其中起到重要作用的两个东西——编译器和链接器。
对于一个cpp后缀的文件来说,我们可以注意到一些使用‘#‘符号开头的语句,我们称这些语句为预处理语句。也就是说这些语句会在编译器工作前就执行,而其中我们最为熟悉的便是#include这一语句,这是C/C++导入头文件所用到的语句,那么他会执行什么呢?其实非常简单粗暴——将引入文件完全复制到本文件。或许你已经注意到了,这样的复制很可能出现一些问题,其中最明显的便是变量或函数的重定义——因为这只是简单而粗暴地完成了复制,计算机并不在意也不知道那些代码只复制一次,当然我们可以使用#pragma once或是声明一个静态变量(static)又或者仅保留函数的声明语句而不去定义。说到函数的定义,相信大家已经注意到了一个问题,我明明没有引入外源cpp但我的工程中的cpp却能使用别的cpp中定义的函数,这就是链接器的作用。我们可以理解为我们的所有cpp都将被拼接形成一个整体,这也解释了为什么我们管定义在main函数外的变量叫全局变量。链接器的工作方式可以理解为遍历,因为这里的技术细节不用太在意也行。
当你的程序经过预处理、编译器和链接器便形成了可执行文件。
原文:https://www.cnblogs.com/UTix/p/14940529.html