从cpp到exe的简单历程

总体来说,分为三步,预处理,编译,链接

预处理

在编译之前,编译器会先处理pre-process(预处理语句)。常见的预处理语句#include,#if,#define,#endif。预处理语句的功能都十分简单。

#include  找到跟在后面的文件,将文件的内容copy进来
#if 和 #endif 简单的判断语句
#define A B 将cpp文件中的B都换成A
编译

.cpp文件的后缀名告诉编译器这是C++文件,用C++的规则编译它。

补充
translate unit:编译器将.cpp文件编译成.obj文件,此时.cpp文件称为translate unit,因为.cpp文件里可能include其他cpp文件,所以translate unit并不一定只有一个.cpp文件

编译器完成预处理后,cpp文件会被编译器编译成机器码文件即.obj文件,.obj文件内是一堆字母数字,.obj文件是无法运行的。

链接

build项目时,所有obj文件会被连接起来,从而形成可运行的.exe文件。而为了obj文件能够链接成功,cpp文件中如果引用了其他cpp文件的方法,需要声明。

如果没有声明,编译时就会出错;如果声明的方法不存在,链接时就会出错

补充
可能出现以下的链接错误

  • 方法的声明和定义不一样
  • 如果某方法只在自己的cpp文件起作用,static修饰
  • 一个项目中可能多个cpp文件调用同样的.h文件,由于include的性质,会造成链接错误,有三种解决方法
  • 1.将.h文件中的方法用static修饰;
  • 2.将.h文件中的方法用inline修饰,表示只将方法的方法体拿来用;
  • 3.头文件中只留方法的声明,将方法的定义放在其中一个使用该头文件的cpp文件中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值