### GCC/G++ 编译命令选项详解 #### 概述 GCC(GNU Compiler Collection)是一个广泛使用的开源编译器套件,支持多种编程语言,包括 C、C++ 等。G++ 是 GCC 的一部分,专门用于编译 C++ 程序。本文将详细介绍 GCC 和 G++ 在执行编译过程时的各个阶段及其相关的编译命令选项。 #### 编译过程的四个主要步骤 1. **预处理**:GCC 或 G++ 首先会通过预处理器(cpp)对源代码进行预处理,处理宏定义、头文件包含等,并生成一个名为 .i 的文件。 2. **编译**:预处理完成之后,编译器(例如 egcs)将 .i 文件编译成汇编语言代码,生成一个名为 .s 的文件。 3. **汇编**:接下来,汇编器(as)将汇编语言代码转换为目标代码(机器代码),生成一个名为 .o 的文件。 4. **链接**:链接器(ld)将所有的 .o 文件链接起来,生成最终的可执行程序。 #### 编译命令选项 - **-x language filename**:指定文件使用的编程语言,使文件的后缀名失效。这对于那些使用非标准后缀名的文件特别有用。例如,如果你的 C 代码文件使用的是 .pig 后缀名,则需要使用 `-x c hello.pig` 来告诉 GCC 这是一个 C 文件。支持的语言包括 `c`, `objective-c`, `c-header`, `c++`, `cpp-output`, `assembler`, `assembler-with-cpp`。 - **-x none filename**:取消上一个 `-x` 选项的效果,即让 GCC 根据文件名的后缀来识别文件类型。例如,`gcc -xc hello.pig -x none hello2.c` 命令中,`hello.pig` 被识别为 C 文件,而 `hello2.c` 则根据其后缀被识别为 C 文件。 - **-c**:只进行预处理、编译和汇编操作,即生成 .o 文件而不进行链接。这通常用于生成中间文件以便后续处理或调试。 - **-S**:仅进行预处理和编译,生成汇编代码 (.s 文件)。这有助于查看编译器如何将高级语言转换为低级语言。 - **-E**:仅进行预处理操作。预处理结果不会保存到文件中,而是输出到标准输出。可以通过重定向将其保存到文件中,如 `gcc -E hello.c > pianoapan.txt`。 - **-o**:指定输出文件的名称,默认情况下 GCC 生成的可执行文件名称为 `a.out`。例如,`gcc -o hello.exe hello.c` 会生成一个名为 `hello.exe` 的可执行文件。 - **-pipe**:使用管道代替编译过程中创建的临时文件。这可以提高编译速度,但在使用非 GNU 汇编工具时可能会出现问题。 - **-ansi**:禁用 GCC 中与 ANSI C 不兼容的特性,并激活 ANSI C 的专有特性。例如,禁止使用 `asm`, `inline`, `typeof` 关键字及某些预处理宏。 - **-fno-asm**:实现 `-ansi` 选项的部分功能,即禁止将 `asm`, `inline` 和 `typeof` 用作关键字。 - **-fno-strict-prototypes**:仅对 G++ 生效,该选项使得未指定参数的函数被视为没有明确指定参数类型,而不是无参数。 - **-fthis-is-variable**:允许将 `this` 作为普通变量使用,符合传统的 C++ 行为。 - **-fcond-mismatch**:允许条件表达式的第二和第三参数类型不同,结果类型默认为 `void`。 - **-funsigned-char/-fno-signed-char/-fsigned-char/-fno-unsigned-char**:这四个选项用于指定 `char` 类型的行为,可以设置为 `unsigned char` 或者 `signed char`。 - **-include file**:包含指定的文件。例如,`gcc hello.c -include /root/pianopan.h` 会包含指定的头文件。 - **-imacros file**:将 `file` 文件中的宏扩展应用到 GCC/G++ 输入文件中。 - **-Dmacro/-Dmacro=defn/-Umacro/-undef/-Idir/-I-/-idirafter dir**:这些选项分别用于定义宏、取消宏定义、取消所有非标准宏定义以及指定包含路径。 ### 结论 了解 GCC 和 G++ 的编译过程及其命令选项对于编写高质量的 C 和 C++ 程序至关重要。通过掌握这些命令选项,开发者能够更好地控制编译过程,优化程序性能,并确保代码符合预期的标准。






























- YUXIANGXIAN2013-11-19谢谢分享,很适合我用
- realHunterHunter2012-12-20对linux初学者还是比较有用的,属于基础入门必备
- Koyma2013-01-30谢谢分享,很适合初学者!
- 晨雪2013-02-19谢谢分享,很适合我用

- 粉丝: 93
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 试析人工智能对会计行业的影响及应对.docx
- 人工智能与新艺术生态.docx
- 虚拟机技术在计算机机房管理中的合理运用.docx
- 一线互联网大厂 Java 核心面试题:基础、异常、集合、并发编程等全涵盖
- C语言程序学生成绩管理.doc
- ab-PLC工程实例-包含Rslogix硬件组态、设置、编程与下载.doc
- 人工智能时代正在开启.docx
- 园区物联网项目实施专业技术方案.docx
- 计算机应用基础知识试题带答案.doc
- 最新互联网区块链商业创业计划书PPTppt模板.pptx
- 试论高中信息技术教学中网络合作学习的应用.docx
- 李军胜PLC课程设计.docx
- 打气球课设研究报告jsp.doc
- 基于计算思维与翻转课堂的计算机应用基础教学改革.docx
- 微博数据采集及爬虫实现:含主体与评论内容的网页解析完整代码
- Web服务的企业ERP与电子商务的集成分析.doc


