开始
先写一段代码
#include<stdio.h>
#define nihao 521
int main(){
printf("%d", nihao);
return 0;
}
这段代码很简单,最后输出的是521,但是程序执行的基本步骤是啥?
预处理
看看预处理后的文件吧
g++ test.c -E -o test.i
-E是预处理参数,
-o是生成目标文件
大概就是头文件的引入、宏的展开等
如图,nihao已经被替换
编译
g++ test.c -S -o test.s
如下图,进行一些代码优化,然后生成汇编程序
可以编译预处理后的文件,也可以之间编译源文件,编译器会自动帮我先预处理。
汇编
g++ test.s -c -o test.o
将汇编指令翻译成二进制形式
正常是无法查看的
链接
这一步简单理解就是把调用库文件合并到程序当中,如我们调用了printf函数,它就会把printf相关的库链接到代码当中
如果你有动态库、静态库的经验,应该就很好理解了,推荐这篇文章 ^ - ^。
g++ test.o -o a.out
生成可运行文件,可以是多个.o文件
详细的流程见牛客视频