# 打印优化级别的对应选项
## 例子
$ gcc -Q --help=optimizers
The following options control optimizations:
-O<number>
-Ofast
-Os
-falign-functions [disabled]
-falign-jumps [disabled]
-falign-labels [disabled]
-falign-loops [disabled]
-fasynchronous-unwind-tables [enabled]
-fbranch-count-reg [enabled]
-fbranch-probabilities [disabled]
-fbranch-target-load-optimize [disabled]
-fbranch-target-load-optimize2 [disabled]
-fbtr-bb-exclusive [disabled]
-fcaller-saves [disabled]
-fcombine-stack-adjustments [disabled]
-fcommon [enabled]
-fcompare-elim [disabled]
-fconserve-stack [disabled]
-fcprop-registers [disabled]
-fcrossjumping [disabled]
-fcse-follow-jumps [disabled]
-fcx-fortran-rules [disabled]
-fcx-limited-range [disabled]
-fdata-sections [disabled]
-fdce [enabled]
-fdefer-pop [disabled]
-fdelayed-branch [disabled]
-fdelete-null-pointer-checks [enabled]
-fdevirtualize [disabled]
-fdse [enabled]
-fearly-inlining [enabled]
-fexceptions [disabled]
-fexpensive-optimizations [disabled]
-ffinite-math-only [disabled]
-ffloat-store [disabled]
-fforward-propagate [disabled]
-fgcse [disabled]
-fgcse-after-reload [disabled]
-fgcse-las [disabled]
-fgcse-lm [enabled]
-fgcse-sm [disabled]
-fgraphite-identity [disabled]
-fguess-branch-probability [disabled]
-fhandle-exceptions
-fif-conversion [disabled]
-fif-conversion2 [disabled]
-finline-functions [disabled]
-finline-functions-called-once [enabled]
-finline-small-functions [disabled]
-fipa-cp [disabled]
-fipa-cp-clone [disabled]
-fipa-matrix-reorg [disabled]
-fipa-profile [disabled]
-fipa-pta [disabled]
-fipa-pure-const [disabled]
-fipa-reference [disabled]
-fipa-sra [disabled]
-fivopts [enabled]
-fjump-tables [enabled]
-floop-block [disabled]
-floop-flatten [disabled]
-floop-interchange [disabled]
-floop-parallelize-all [disabled]
-floop-strip-mine [disabled]
-flto-report [disabled]
-fltrans [disabled]
-fmath-errno [enabled]
-fmerge-all-constants [disabled]
-fmerge-constants [disabled]
-fmodulo-sched [disabled]
-fmove-loop-invariants [enabled]
-fnon-call-exceptions [disabled]
-fnothrow-opt [disabled]
-fomit-frame-pointer [disabled]
-foptimize-register-move [disabled]
-foptimize-sibling-calls [disabled]
-fpack-struct [disabled]
-fpack-struct=<number>
-fpeel-loops [disabled]
-fpeephole [enabled]
-fpeephole2 [disabled]
-fpredictive-commoning [disabled]
-fprefetch-loop-arrays [enabled]
-freg-struct-return [disabled]
-fregmove [disabled]
-frename-registers [enabled]
-freorder-blocks [disabled]
-freorder-blocks-and-partition [disabled]
-freorder-functions [disabled]
-frerun-cse-after-loop [disabled]
-freschedule-modulo-scheduled-loops [disabled]
-frounding-math [disabled]
-frtti [enabled]
-fsched-critical-path-heuristic [enabled]
-fsched-dep-count-heuristic [enabled]
-fsched-group-heuristic [enabled]
-fsched-interblock [enabled]
-fsched-last-insn-heuristic [enabled]
-fsched-pressure [disabled]
-fsched-rank-heuristic [enabled]
-fsched-spec [enabled]
-fsched-spec-insn-heuristic [enabled]
-fsched-spec-load [disabled]
-fsched-spec-load-dangerous [disabled]
-fsched-stalled-insns [disabled]
-fsched-stalled-insns-dep [enabled]
-fsched2-use-superblocks [disabled]
-fschedule-insns [disabled]
-fschedule-insns2 [disabled]
-fsection-anchors [disabled]
-fsel-sched-pipelining [disabled]
-fsel-sched-pipelining-outer-loops [disabled]
-fsel-sched-reschedule-pipelined [disabled]
-fselective-scheduling [disabled]
-fselective-scheduling2 [disabled]
-fshort-double [disabled]
-fshort-enums [enabled]
-fshort-wchar [disabled]
-fsignaling-nans [disabled]
-fsigned-zeros [enabled]
-fsingle-precision-constant [disabled]
-fsplit-ivs-in-unroller [enabled]
-fsplit-wide-types [disabled]
-fstrict-aliasing [disabled]
-fstrict-enums [disabled]
-fthread-jumps [disabled]
-fno-threadsafe-statics [enabled]
-ftoplevel-reorder [enabled]
-ftrapping-math [enabled]
-ftrapv [disabled]
-ftree-bit-ccp [disabled]
-ftree-builtin-call-dce [disabled]
-ftree-ccp [disabled]
-ftree-ch [disabled]
-ftree-copy-prop [disabled]
-ftree-copyrename [disabled]
-ftree-cselim [enabled]
-ftree-dce [disabled]
-ftree-dominator-opts [disabled]
-ftree-dse [disabled]
-ftree-forwprop [enabled]
-ftree-fre [disabled]
-ftree-loop-distribute-patterns [disabled]
-ftree-loop-distribution [disabled]
-ftree-loop-if-convert [enabled]
-ftree-loop-if-convert-stores [disabled]
-ftree-loop-im [enabled]
-ftree-loop-ivcanon [enabled]
-ftree-loop-optimize [enabled]
-ftree-lrs [disabled]
-ftree-phiprop [enabled]
-ftree-pre [disabled]
-ftree-pta [enabled]
-ftree-reassoc [enabled]
-ftree-scev-cprop [enabled]
-ftree-sink [disabled]
-ftree-slp-vectorize [enabled]
-ftree-sra [disabled]
-ftree-switch-conversion [disabled]
-ftree-ter [disabled]
-ftree-vect-loop-version [enabled]
-ftree-vectorize [disabled]
-ftree-vrp [disabled]
-funit-at-a-time [enabled]
-funroll-all-loops [disabled]
-funroll-loops [disabled]
-funsafe-loop-optimizations [disabled]
-funsafe-math-optimizations [disabled]
-funswitch-loops [disabled]
-funwind-tables [disabled]
-fvar-tracking [enabled]
-fvar-tracking-assignments [enabled]
-fvar-tracking-assignments-toggle [disabled]
-fvar-tracking-uninit [disabled]
-fvariable-expansion-in-unroller [disabled]
-fvect-cost-model [enabled]
-fvpt [disabled]
-fweb [enabled]
-fwhole-program [disabled]
-fwpa [disabled]
-fwrapv [disabled]
## 技巧
如上所示,使用`-Q --help=optimizers`选项可以打印出gcc的所有优化(相关的)选项,以及缺省情况下它们是否打开。类似的,你也可以查看不同优化级别下,这些优化选项是否打开:
$ gcc -Q --help=optimizers -O
$ gcc -Q --help=optimizers -O1
$ gcc -Q --help=optimizers -O2
$ gcc -Q --help=optimizers -O3
$ gcc -Q --help=optimizers -Og
$ gcc -Q --help=optimizers -Os
$ gcc -Q --help=optimizers -Ofast
详情参见[gcc手册](https://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html#Overall-Options)
## 贡献者
xmj
- 信息显示
- 打印gcc预定义的宏信息
- 打印gcc执行的子命令
- 打印优化级别的对应选项
- 打印彩色诊断信息
- 打印头文件搜索路径
- 打印连接库的具体路径
- 预处理
- 生成没有行号标记的预处理文件
- 在命令行中预定义宏
- 在命令行中取消宏定义
- 汇编
- 把选项传给汇编器
- 生成有详细信息的汇编文件
- 调试
- 利用Address Sanitizer工具检查内存访问错误
- 利用Thread Sanitizer工具检查数据竞争的问题
- 连接
- 把选项传给连接器
- 设置动态连接器
- 函数属性
- 禁止函数被优化掉
- 强制函数inline
- 常见错误
- error: cast from ... to ... loses precision
- all warnings being treated as errors
- gdb无法调试gcc编译的程序
- 其它
- 只做语法检查
- 保存临时文件
- 打开警告信息
- 指定语言类型
- 改变结构体成员的字节对齐