首先是gcc对于各个文件后缀的识别
.c为后缀的文件,C语言源代码文件; .a为后缀的文件,是由目标文件构成的库文件; .C,.cc或.cxx 为后缀的文件,是C++源代码文件; .h为后缀的文件,是程序所包含的头文件; .i 为后缀的文件,是已经预处理过的C源代码文件; .m为后缀的文件,是Objective-C源代码文件; .o为后缀的文件,是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; .S为后缀的文件,是经过预编译的汇编语言源代码文件2.gcc各个参数说明 2.1编译阶段
指令
gcc-S hello.i -o hello.s
编译器:gcc
将.s文件生成汇编语言
指令
gcc-c hello.s -o hello.o
汇编器:as
生成二进制代码
指令
gcc hello.o -o [应用](默认a.out)
连接器:od
链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。
指令
gcc hello.s -o [应用](默认a.out)
gcc自动调用编译器汇编器连接器等
2.5gcc直接生成应用时各个参数说明指令
-Include[指定头文件寻找地址(先去系统库后去指定库)] -D[定义好的宏指令] -O[是否进行优化,将无用代码折叠]0123四个级别【注1】【注2】 -wall[输出警告信息] -g[加入调试信息]
注1:传说中gcc共有5个优化级别,-O4优化选项是将你的代码邮件给Jeff重写一下[就算你写O8也只是给你开到O3别痴心妄想了]
注2:但是实际应用中STL编译的时候,我们会开O2优化,开完之后其实速度跟数组模拟的队列差不多快
在算法竞赛中,比赛方一般不会开O2优化,这种情况下STL的栈队列要比数组模拟的栈队列慢一倍左右



