gcc 编译选项
确定语言标准。当前仅在编译C或C ++时才支持此选项。
必须提供此选项的值。可能的值是
‘c90’
‘c89’
‘iso9899:1990’
Support all ISO C90 programs (禁用了与ISO C90冲突的某些GNU扩展). Same as -ansi for C code.
‘iso9899:199409’
ISO C90 as modified in amendment 1.
‘c99’
ISO C99. This standard is substantially completely supported,
‘c11’
ISO C11, the 2011 revision of the ISO C standard. This standard is substantially completely supported,
‘gnu90’
‘gnu89’
GNU dialect of ISO C90 (including some C99 features).
‘gnu99’
GNU dialect of ISO C99.
‘gnu11’
GNU dialect of ISO C11. This is the default for C code.
‘c++98’
‘c++03’
1998 ISO C ++标准以及2003技术勘误表和一些其他缺陷报告. Same as -ansi for C++ code.
‘gnu++98’
‘gnu++03’
GNU方言 -std=c++98.
‘c++11’
2011 ISO C ++标准及其修订版
‘gnu++11’
GNU方言 -std=c++11.
‘c++14’
2014 ISO C ++标准及其修订版
‘gnu++14’
GNU方言 -std = c ++ 14 这是C ++代码的默认设置。
最初的ANSI C标准(X3.159-1989)于1989年批准并于1990年发布。该标准在1990年晚些时候被批准为ISO标准(ISO / IEC 9899:1990)。
要在GCC中选择此标准,请使用以下选项之一 -ansi, -std=c90 或者 -std=iso9899:1990;
1995年发布了对1990年标准的修订。修订后的标准有时称为C94或 C95。要在GCC中选择此标准,请使用 -std = iso9899:199409
ISO C标准的新版本于1999年作为ISO / IEC 9899:1999发布,通常称为C99。(在开发过程中,此标准版本的草案被称为C9X。)GCC对该标准版本提供了基本完整的支持; 请使用-std = c99 或 -std = iso9899:1999。
C标准的第四个版本称为C11,于2011年发布为ISO / IEC 9899:2011。(在开发过程中,此标准版本的草案被称为C1X。)GCC对该标准提供了基本完整的支持,并启用了-std = c11 要么 -std = iso9899:2011。
调试程序的选项
要告诉GCC生成更多信息供调试器使用,几乎在所有情况下,您只需要添加 -g 选项
如果没有使用其他优化选项,可以考虑使用-Og。如果没有-O选项,some compiler passes that collect information useful for debugging do not run at all,因此-Og可能会带来更好的调试体验。
控制优化的选项
如果没有任何优化选项,编译器的目标是降低编译成本并使调试产生预期的结果。语句是独立的:如果您在语句之间使用断点来停止程序,则可以将新值分配给任何变量,或者将程序计数器更改为函数中的任何其他语句,并从源代码中准确获取期望的结果。
启用优化标志会使编译器尝试以牺牲编译时间和调试程序的能力为代价来提高性能和/或代码大小。
并不是所有的优化都是由一个标志直接控制的。本节只列出有标记的优化。
大多数优化只有在命令行上设置-O级别时才启用。否则,即使指定了各个优化标志,它们也会被禁用。(指详细的单个优化标志,例如-fcrossjumping)
-O
-O1
优化。对于大型函数,优化编译需要更多的时间和更多的内存。
用 -O, 编译器会尝试减少代码大小和执行时间,不执行任何需要大量编译时间的优化。
-O2
更多的优化。GCC执行几乎所有支持的优化,而这些优化不涉及以空间换时间。相比于-O,此选项会增加编译时间和所生成代码的性能。
-O2 打开所有-O 指定的优化标志 .
-O3
进一步优化. -O3打开-O2指定的所有优化,也打开 -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload, -ftree-loop-vectorize, -ftree-loop-distribute-patterns, -fsplit-paths -ftree-slp-vectorize, -fvect-cost-model, -ftree-partial-pre, -fpeel-loops and -fipa-cp-clone options.
-O0
减少编译时间,使调试产生预期的结果。这是默认设置。
-Os
优化大小. -Os 打开所有-O2 中通常不会增加代码大小的优化.
它还使 -finline功能,导致编译器调整代码大小而不是执行速度,并执行旨在减小代码大小的进一步优化。
-Ofast