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

  2. 编译
    检查语法,生成汇编 >> test.s main.s

  3. 汇编
    汇编代码转换成机器码 >> test.o main.o

  4. 链接
    链接生成可执行文件 >> a.out

预处理

预处理命令:
C语言编译过程 || 4 stages of compiling a C program
以及预处理宏:

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

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

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

添加链接描述