0 Preface/Foreword
0.1 相关博客
MinGW & MinGW-W64介绍_mingw和mingw-w64-CSDN博客
1 gcc介绍
1.1 名字由来
早期,++GCC++是++G++NU ++C++ ++C++ompiler (GNU C编译器)。
现在GCC 的含义:GNU Compiler Collection (GNU编译器套件)。因为随着功能的扩展,GCC开始++支持C++、Go、Objective-C++等多种编程语言。
1.2 主要特点
- 多语言支持:GCC以C/C++闻名,但GCC是一个多前端、共享后端的编译器集合,支持多种主流编程语言。
- 跨平台与可移植性 :支持x86 、ARM、MIPS 、RISC-V等多种硬件架构,可以在Linux、BSD、macOS、Windows等多种操作系统上运行。
- 开源自由软件:遵循GPL(GNU共用公共许可证)和LGPL许可证发布,用户可以自由使用、修改和分发。
- 模块化设计 :
- 前端 :解析特定语言的源代码,生成抽象语法树。
- 中间端:进行与机器无关的代码优化。
- 后端 :生成特定硬件架构 的汇编代码 和机器码。
1.3 编译流程
++GCC将源代码转换为可执行文件++通常经过++四个阶段++:
- 预处理(Preprocessing) :处理宏定义、头文件包含、条件编译等,生成**.i**文件。
- 编译(Compilation) :进行语法分析 、语义分析 和优化 ,++将代码转换为汇编语言++,生成**.s**文件。
- 汇编(Assembly) :将汇编代码转换为机器指令,生成目标文件**.o**。
- 链接(Linking) :将多个目标文件 和库文件 链接在一起,生成最终的可执行文件。
1.4 历史背景
- ++创始人++ :由Richard Stallman于1987年发起,作为GNU计划的一部分,旨在为自由操作系统提供一个自由的编译器。
- ++地位++ :GCC是Linux生态系统中最标准的编译器,也是许多其他编译器(如Clang /LLVM)出现之前的事实标准。
++简而言之++,GCC是一个强大、免费且广泛使用的工具链,负责将程序员编写的高级语言代码翻译成计算机能够执行的机器码。
1.5 GCC与Clang对比
GCC和Clang各有优势,没有绝对的好坏,主要看使用场景。Clang在开发体验上更友好,GCC在运行性能和生态上更成熟 。
1.5.0 官网
- Clang : Clang - Getting Started
- GCC:
1.5.1 编译体验区别
- 编译速度:Clang通常更快,尤其在增量编译和模版代码上,内存占用更低;
- 错误提示:Clang的报错信息更清晰友好,能直接标记代码位置,适合新手调试;
- 工具集成:Clang模块化设计友好,更容易集成到IDE(如VSCode、CLion)和静态分析工具中。
1.5.2 生成代码性能
- 优化能力 :在高优化级别(如**-O3**)下,GCC生成的代码运行效率通常略高,尤其在整数运算和嵌入式领域。
- 标准支持:两者都支持最新C/C++标准,Clang对新特性支持往往更快,GCC对传统GNU扩展兼容性更好。
- 许可证:Clang采用BSD许可证,更宽松适合商用集成;GCC采用GPL许可证,开源生态更深厚。
1.5.3 不同场景怎么选
- 选Clang:适合macOS开发、注重编译效率、需要良好错误诊断、希望使用现代静态分析工具的团队;
- 选GCC:适合Linux系统默认环境、追求极致运行性能、依赖特定GNU扩展或嵌入式开发场景;
- 混合使用 :大型项目可在++开发阶段++ 用Clang提升效率,++发布阶段++ 用GCC优化性能。