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