目录
1、gcc概述
GNU计划提供的编译器。(在unix系统中,则是cc编译器)
2、由源文件到可执行文件需要经历的步骤
- 预处理:头文件展开(#include)、宏替换(#define)、条件编译(#ifdef)
(预处理阶段处理的都是以#开头的代码) - 编译:检查语法、转成汇编、生成汇编文件(.s/.S)
- 汇编:编译汇编文件,生成目标文件(.o)
- 链接:链接所有目标文件,生成符号表,生成可执行文件(elf)
(elf即可执行连接文件格式,elf文件参与程序的连接和执行,即参与建立一个程序和执行一个程序的过程)
3、 交叉编译
在宿主机下编程出在目标机下运行的代码的过程,这就是交叉编译。(首先需下载交叉编译器)
(即在当前cpu平台编译出在其他cpu平台运行的代码的过程)
4、编译选项
(1)-o:可执行文件重命名(elf格式)
(2)-E:只进行预处理
gcc -E demo.c > demo.i :将预处理信息放到.i文件中
(3)-S:进行编译阶段
(4)-c:进行汇编阶段
(5)-O1 -O2 -O3:编译优化
gcc -O1 demo.c -o demo :一级优化
gcc -O2 demo.c -o demo :二级优化
gcc -O3 demo.c -o demo :三级优化
(time ./demo:可以测算代码运行的时间)
(6)-w:关闭警告
gcc -w demo.c -o demo
(不推荐使用,警告可能不影响程序的执行,但忽视警告运行时可能会造成程序上的一些问题)
(7)-Wall:开启所有警告
(8)-I+路径:指定头文件的第三方搜索路径
#include “stdio.h"和#include <stdio.h>的区别:搜索路径不同
<>:在系统头文件目录(/usr/include)中搜索,若没有,则报错
“”:先在当前目录中搜索,若没有,则去系统头文件目录中搜索,若还没有,在报错
规范:<> :包含系统头文件 “”:包含自定义文件
(”"虽然方便,但是大体量代码,仍需注意规范,提高编译效率)
补充:代码注释的方法
(1)/* */
(2)#if0…#endif :注释 #if1…#endif:解开注释