GCC -- GNU C & C++ Compiler
一、使用
gcc [option|filename]...
g++ [option|filename]...
二、GCC的处理步骤
(1)预处理:对预处理指令和宏进行处理
(2)编译:将代码编译成汇编代码
(3)汇编:将汇编代码生成二进制文件
(4)连接:将目标二进制文件进行连接形成可执行程序
三、gcc和g++
gcc认为预处理后的文件是C文件,以C形式连接
g++认为预处理后的文件是C++文件,以C++形式连接
四、文件扩展名及后续操作
.c c程序;预处理、编译、汇编
.C c++程序;预处理、编译、汇编
.cc c++程序;预处理、编译、汇编
.cxx c++程序;预处理、编译、汇编
.m objective-c程序;预处理、编译、汇编
.i 预处理后的C文件;编译、汇编
.ii 预处理后的C++文件;编译、汇编
.s 汇编语言源程序;汇编
.S 汇编语言源程序;预处理,汇编
传递给链接器的文件.o,.a文件
.o 目标文件
.a 静态库文件
五、总体选项
(1)-x 指明输入文件的语言(不从扩展名得到)(c、objective-c、c++、assembler、none等)
g++ -x c ctest.c
(2)-o 输出文件
g++ -o ctest.o ctest.c
(3)-v 显示编译阶段的详细信息
g++ -v -o ctest.o ctest.c
(4)-E 预处理后便停止,送标准输出(不产生文件)
g++ -E ctest.c
(5)-S 编译后便停止,不汇编;对于输入的非汇编语言文件,产生汇编语言文件(.s文件)
g++ -S ctest.c
(6)-c 编译或汇编文件,不作链接;输出目标文件(.o文件)
g++ -c ctest.c
(7)不加-E、-S、-c,则预处理、编译、汇编、链接
g++ -o ctest ctest.c,产生可执行文件
六、语言选项(控制编译器可接受的C方言)
(1)-ansi 支持标准的ANSI C程序
(2)-fno-asm 不把asm、inline、typeof当关键字
(3)-fno-builtin 不接受不是两个下划线开头的内建函数
(4)-fdollars-in-identifiers 允许$作为标识符
(5)-fno-dollars-in-identifiers 不允许$作为标识符
(6)-fall-virtual 所有可能的成员函数黙认为虚函数
(7)-fthis-is-variable 允许对this赋值
(8)-funsigned-char 将char定义为无符号的
(9)-fsigned-char将char 定义为有符号的 -fno-unsigned-char
(10)-funsigned-bitfileds、-fno-signed-bitfields 定义位域为无符号的
(11)-fsigned-bitfields、-fno-unsigned-bitfields 定义位域为有符号的
(12)-fwritable-strings 将字符串常量放到可写数据段
还有其他一些语言选项,见GCC手册