1# 编译选项规范
2| 编译选项  | 作用  |
3|---|---|
4| 禁止使用"-Wno-XXXX"抑制"-Wall"包含的所有警告选项 | |
5| 明确-D编译宏的具体用途,建立-D编译宏的清单 | |
6| -fno-common  | 未初始化的全局变量放置在目标文件的数据段  |
7| -fvisibility=hidden  | 设置默认的ELF镜像中符号的可见性为隐藏  |
8| -fsigned-char/-funsigned-char  | 显式设置char的类型  |
9| -Wl,-Bsymbolic/-rdynamic/-Wl,--no-undefined  | 打开如下链接选项  |
10| -pipe  | 打开总体选项,提升编译速度,消耗更多内存 |
11| -Wall  | 打开"-Wall"选项,检查有用的警告选项集  |
12| -Wextra | 打开"-Wextra"选项,检查除"-Wall"外附加的选项集;"-Wextra"中误报较多的选项,可以使用"-Wno-XXXX"屏蔽|
13| -Wformat=2 | 打开"-Wformat=2"选项,检查格式化输入/输出函数的安全|
14| -Wstrict-prototypes | 打开"-Wstrict-prototypes "选项,避免函数在声明或定义中没有指定参数类型|
15| -Wdate-time | 打开"-Wdate-time"选项,避免使用时间宏,确保二进制一致性|
16| -Wfloat-equal | 打开"-Wfloat-equal"选项,避免浮点数相等比较运算|
17| -Wswitch-default | 打开"-Wswitch-default"选项,确保switch语句有default分支|
18| -Wshadow | 打开"-Wshadow"选项,检查变量覆盖|
19| -Wstack-usage=len |打开"-Wstack-usage=len"选项,设置栈大小,避免栈溢出 |
20| -Wframe-larger-than=len |打开"-Wframe-larger-than=len" 选项,设置栈框架大小,避免栈溢出 |
21| -Wconversion | 打开"-Wconversion"选项,避免隐式转换改变数值|
22| -Wcast-qual |打开"-Wcast-qual"选项,指针类型强制转换时,避免目标类型丢失类型限定词 |
23| -Wcast-align|打开“-Wcast-align”选项,检查指针类型强制转换,避免目标所需的地址对齐字节数增加 |
24| -Wvla |打开"-Wvla"选项,避免变长数组 |
25| -Wunused |打开"-Wunused"选项,避免无效代码 |
26| -Wundef | 打开"-Wundef"选项,避免预编译指令#if语句中出现未定义的标识符|
27| -Wnon-virtual-dtor |打开"-Wnon-virtual-dtor"选项,避免基类析构函数没有定义虚函数 |
28| -Wdelete-non-virtual-dtor |打开"-Wdelete-non-virtual-dtor"选项,当基类析构函数没有定义虚函数,避免通过指向基类的指针来执行删除操作 |
29| -Woverloaded-virtual |打开"-Woverloaded-virtual"选项,避免隐藏基类虚函数 |
30
31
32
33