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