C语言编译过程 || 4 stages of compiling a C program

C语言作为编译语言,用来向计算机发出指令,代码会经过4个环节,形成最终的文件

预处理
编译
汇编
链接
file.c
file.i
file.s
file.o
a.out
  1. 预处理
    展开头文件/宏替换/去掉注释/条件编译 >> test.i main.i
    编译预处理,也称预编译,g++ -E test.ii

  2. 编译
    检查语法,生成汇编 >> test.s main.s
    生成汇编 g++ -S target.s

  3. 汇编
    汇编代码转换成机器码 >> test.o main.o
    汇编 g++ -c target.o

  4. 链接
    链接生成可执行文件 >> a.out
    链接 g++ -o target

通过添加g++ --save-temps参数,保存编译过程中生成的所有中间文件

预处理

预处理命令:
在这里插入图片描述
以及预处理宏:

LINE 表示正在编译的文件的行号
__FILE__表示正在编译的文件的名字__DATE__表示编译时刻的日期字符串,例如: “25 Dec 2007”
TIME 表示编译时刻的时间字符串,例如: “12:30:55”
STDC 判断该文件是不是定义成标准 C 程序 我的vs2013不是定义的标准c语言

宏函数很好用,是直接展开,在这我顺便说一下宏的好处和坏处。
宏优点1代码复用性2提高性能
宏缺点1 不可调试(预编译阶段进行了替换),2无类型安全检查3可读性差,容易出错
在这里插入图片描述
宏函数很皮,#define定义一个比如判断大小,替换常量,很是方便。

不过我现在也就用下,#define ERROR_POWEROFF -1,#define _CRT_SECURE_NO_WARNINGS 1这样的和编译器有关的东西,不会去写宏函数,宏函数这东西,可读性特别差,在c++中,一般用const/枚举/内联去替代宏。
但是,define宏在某些方面真的是非常好用,我很推荐

添加链接描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值