Files
CPlusPlusThings/site_extras/cpp-tools-gcc-flags-guide.md
light-city dfe1c933b3 docs: address community issue feedback (#5 #338 #142 #246 #136 #303)
- const README: rewrite the space-saving claim per issue #5 follow-ups
  (constant-expression const vs #define immediates; which const qualify
  as constant expressions)
- const README: fix the class-section diagnosis per issue #338 (overload
  resolution picks the const overload; the restriction only surfaces
  once that overload is removed)
- sizeof README: virtual-inheritance result is compiler-dependent
  (GCC merges vbptr+vfptr -> 16, MSVC keeps them separate -> 32) #246
- static README: new section on internal linkage / access restriction
  with anonymous-namespace comparison #142
- 10-day practice: full problem list table + fixed day links #136
- new design_pattern/singleton/singleton_default.hpp: reusable
  thread-safe CRTP singleton template, compile+concurrency tested #303
2026-10-13 19:23:54 +08:00

81 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
> 来自 [C++那些事网站](https://light-city.github.io/stories_things/cpp-tools/gcc-flags-guide/) 的文章,由站点同步脚本导出。
# GCC 编译选项详解
大家经常在编译代码时通常会使用一些gcc flags,今天这篇文章来梳理一下一些比较重要的gcc flag。
## 1.优化flag
优化标志用于提高编译代码的性能。这些标志可以加速编译过程并生成高效的程序。
一些常用的优化标志包括:
`-O1`、`-O2`、`-O3`、`-Os`:这些标志控制应用的优化级别。
`-O1`应用基本优化,而`-O2`和`-O3`提供更高级的优化。-Os优化代码大小。
`-finline-functions`、`-funroll-loops`:这些标志分别控制函数内联和循环展开优化,旨在消除函数调用开销并减少循环迭代。
## 2.调试Flag
调试标志有助于提供额外信息,使调试工具能够跟踪和分析代码。
一些常用的调试标志包括:
`-g`:该标志在编译后的可执行文件中包含调试符号。
`-ggdb`:该标志使GCC以适用于GNU调试器(GDB)的格式生成调试信息。
## 3.警告Flag
警告标志有助于识别潜在问题、编码错误或代码中存在问题的实践。通过启用警告标志,编译器会对这些情况提供警告,使开发人员能够提高代码质量。
一些常用的警告标志包括:
`-Wall`:该标志启用一套全面的警告,涵盖各种潜在问题。
`-Werror`:该标志将警告视为错误,使编译器在遇到警告时停止编译过程。
## 4.预处理器Flag
预处理器标志负责处理源代码中以#开头的指令。这些标志定义宏并控制编译。
一些常用的预处理器标志包括:
`-D`:该标志用于在编译过程中定义宏。例如,`-DDEBUG`可用于定义DEBUG宏,根据其是否存在启用条件编译。
`-I`:该标志用于指定头文件位于的额外目录。它帮助预处理器在编译代码时找到必要的头文件。
## 5.链接器Flag
链接器标志控制链接过程,该过程在编译后进行,将目标文件和库组合以生成最终的可执行文件。
一些常用的链接器标志包括:
`-l`:该标志用于链接外部库。例如:`-lpthread`链接POSIX线程库。
`-L`:该标志用于指定库位于的额外目录。它帮助链接器在链接过程中找到所需的库。
## 6.平台特定flag
GCC提供了针对特定平台的标志,允许开发人员针对特定架构或启用特定平台功能。在为特定硬件或操作系统开发代码时,这些标志非常有用。
平台特定标志包括:
`-march`:该标志指定目标架构。例如,`-march=native`指示GCC优化为主机机器的架构。
`-m32`和`-m64`:这些标志指定是为32位还是64位目标进行编译。
## 7.其他Flag
除了前面提到的类别,还有一些其他标志。
一些常用的杂项标志包括:
`-std`:该标志指定要使用的C语言标准版本。例如,`-std=c99`选择C99标准。 `-pedantic`:该标志启用对所选择的C语言标准的严格遵守,对非标准或可疑代码结构提供额外的警告。 `-Wextra`:该标志启用超过-Wall启用的额外警告,提供更全面的代码分析。
需要注意的是,标志的可用性和功能可能会因GCC的不同版本和平台而有所变化。因此,建议查阅GCC文档和相关资源,获取有关特定标志及其用法的详细信息。
完整文档地址:
> https://gcc.gnu.org/onlinedocs/gcc/