1. 程序翻译的过程有四个步骤,预处理->编译->汇编->链接。
那么每个步骤是干什么?
预处理阶段:处理-> 头文件、宏替换、条件编译等等,我用 linux 环境查看一下,如下:
首先写一个简单的 .c 文件,里面包含宏替换、头文件、条件编译等等,我写了这三个。
#include <stdio.h>
#define N 2
int main()
{
printf("%d\n", N);
#ifdef DEBUG
printf("debug\n", );
#else
printf("nodebug\n");
#endif
return 0;
}
然后 linux 中,用 gcc -E -o Test.i Test.c 这条命令就是处理预处理,生成 .i 文件,我就简单截几张图,因为生成的 .i 800多行,如下:
那么编译呢?
编译是把代码转成汇编代码,这里用到的命令是 gcc -S -o Test.s Test.i ,如下:
那么汇编呢?
汇编是把汇编代码转成二进制文件,也就是机器可以识别的二进制语言,用到的命令是 gcc -c -o Test.o Test.s ,下面是二进制文件的内容,前面的还可以看懂,这个就看不懂了。
也可以用二进制指令打开看一下文件中的二进制,命令 od Test.o ,我简单截一下图,如下:
那么最后链接呢?
链接就是编译链接你所写的程序需要用到那写库,然后去链接找你需要的那些库,命令 gcc -o Test Test.o ,生成的 Test 文件就是可执行文件,执行的结果如下:
这里解释一下,命令中 -o 紧跟着的文件你需要生成的文件,你也可以将 gcc -o Test Test.o 写成 gcc Test.o -o Test
如果记不住有个技巧就是,预处理 编译 汇编 所对的命令参数是 ESc,生成的文件后缀名是 ios