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
This commit is contained in:
light-city
2026-10-13 19:23:54 +08:00
parent cfc9af1fcb
commit dfe1c933b3
159 changed files with 20461 additions and 182 deletions

View File

@@ -0,0 +1,81 @@
> 来自 [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/