mirror of
https://github.com/Light-City/CPlusPlusThings.git
synced 2026-10-29 03:14:06 +08:00
- 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:
81
site_extras/cpp-tools-gcc-flags-guide.md
Normal file
81
site_extras/cpp-tools-gcc-flags-guide.md
Normal 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/
|
||||
Reference in New Issue
Block a user