编译选项规范

编译选项 作用
禁止使用"-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"选项,避免隐藏基类虚函数