版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_877667836/article/details/82779741
【重点】
- 掌握C语言如何变成机器指令的过程
- gcc工具的几个常用选项的意义
【难点】
- c编译过程在gcc工具上的体现
GCC概述
GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 更多编程语言。
C语言的编译过程
-
预处理
预编译是将c源码中的宏进行替换
命令 [gcc -E][+]gcc -E -o source.i source.c [-]source.i
-
编译
编译是将预处理过的文件翻译成汇编语言
命令[gcc -S][+]gcc -S -o source.s source.c [-]source.s
-
汇编
对汇编文件再编译生成目标文件
命令[gcc -c][+]gcc -c -o source.o source.s [-]source.o
-
链接
链接是将目标文件与其他目标文件链接生成可执行文件build
命令[gcc -o filename][+]gcc -o build source.o [-]build
我们生成可执行文件会经历上述过程,但我们没有必要一步步那样做,使用下列命令可以直接使c源文件编译链接成可执行文件。
[+]gcc -o build source.c
[-]build
GCC的其他应用
1.编译时加入宏
在开发过程中,我们常常有需要维护多个版本,比如说有debug版和release版,debug版会输出一些调试信息,release版不希望看到这信息。这是可以使用宏作为开关,在编译时加入宏,实现同一个代码不同的编译结果。
命令[gcc -Dxxx], 字符"xxx"就是我们定义的宏。
比如下面的代码,当使用
gcc -DDEBUG -o build source.c
编译时,执行build文件时,就会输出调试信息。
{
#ifdef DEBUG
printf("This is a debug massage, line %d, file: %s", __LINE__, __FILE__);
#endif
}