Gcc编译器

来源:互联网 发布:淘宝保养品店铺推荐 编辑:程序博客网 时间:2024/06/05 18:41

什么是GCC编译器?
为什么需要GCC编译器?
没有GCC编译器行不行?
有GCC编译器有什么好处?

编译器:
需要将人们用高级语言编写的程序“翻译”为机器能识别的0和1 表示的机器语言。

GCC编译器有什么好处:
①:GCC是交叉编译器(编译和运行的环境不同的程序,要用交叉编译器编译)符合我们嵌入式开发的需求(程序编译和运行的环境不同)。
②:GCC支持的语言比较多,功能强大。

预处理: gcc -E test.c -o test.i
编译:gcc -S test.i -o test.s
gcc -S test.c -o test.s
汇编:gcc -c test.s -o test.o
gcc -c test.c -o test.o
gcc -c test.i -o test.o
链接:gcc test.o -o test
gcc test.c -o test
gcc test.i -o test
gcc test.s -o test

预编译阶段:
第一方面:替换头文件#include<stdio.h>/#include "math.h"
头文件是前人写好的函数,这些函数的实用频率比较高,没必要每个人每次写代码都要写。加了头文件,函数可以直接拿来用。

补充:<>和”“d的区别:
<>:表示编译器从系统头文件里寻找头文件。
“”:表示编译器先从当前文件夹下寻找需要的头文件,如果没找到,则到系统头文件里寻找头文件,如果还没找到,编译器报错。

第二方面: 替换宏定义

#define PI  3.14

第三方面:替换宏条件编译

#ifdef PI    printf("PI");#endif#if  #elif  #else  #endif   

第四方面:去掉注释。

预编译的作用:
编译器的作用是把高级语言编写的源程序编译成机器能够识别的机器语言,
所以吧非核心的部分交给预编译器来做,显得分工更明确。

编译阶段:由编译器把源代码编译成汇编代码

汇编阶段:由汇编器把汇编代码汇编成目标文件(二进制文件)

链接阶段:把目标文件与操作系统链接起来。
原因:进过汇编器汇编的代码不能在机器上运行,为了使操作系统能够加载可执行文件,文件中必须包含固定的信息头,还必须与操作系统的启动代码链接起来才能运行。