gcc和程序的翻译过程
- gcc介绍
- 程序的翻译过程
- 预编译
- 编译
- 汇编
- 链接
- 命令行式宏定义
gcc介绍
gcc是一款编译C语言编译器,可以把我们用vim写的代码编译成可执行程序。编译C++用g++进行编译,C++的文件后缀是test.cc或test.cpp或test.cxx
如果要安装g++就执行以下命令
sudo yum install gcc-c++//g++内核底层是gcc
gcc + 程序 就会形成可执行文件,默认是a.out,如果目录下已经存在,那么就会把a.out覆盖掉。
gcc -o + newname + 程序:给编译后的可执行程序重命名
gcc + 程序 -o + newname:给编译后的可执行程序重命名
程序的翻译过程
程序的翻译过程包括预编译,编译,汇编和链接
预编译
预编译就是把程序进行宏替换,去注释等等,把代码变简单,预编译过后还是C语言文件
通过vim写下面一串代码,演示预编译的过程
gcc -E test.c -o newname//预处理命令
通过上述命令把生成的预编译文件写进新建的文件,建议后缀为“ .i ”,如果没有新的文件名,那么新建的文件就会打印在屏幕上。
用vim打开预编译后的文件,发现头文件展开了,宏被替换了,注释也没有了
编译
编译的过程是进行语法检查的过程,然后把C语言编译成汇编语言
gcc -S 预编译过的文件 -o newname//生成汇编文件的命令
也可以直接从c文件直接变为汇编文件
用vim打开刚刚生成的文件,里面就是汇编语言
汇编
把汇编语言编译成为二进制目标文件
gcc -c 汇编过的文件 -o newname//生成可重定位目标文件的命令
Windows里面生成的文件就是obj为后缀的文件,就是目标文件
链接
把库函数和我们的程序链接起来形成可执行程序
gcc test.o -o newname
也可以直接gcc test.o 后面什么都不加,直接形成可执行程序,这就是链接的过程
上述命令和最开始一部形成可执行文件一样,都是gcc + 文件
命令行式宏定义
如图,没有v1 的宏定义,但是可以通过命令行式的定义宏
gcc -D v1 test.c
如图2,这种定义宏的方式,可以更方便的改变宏