使用 g 进行 C 编译的彻底而详细的警告标志
Gcc 提供了一套全面的警告标志来帮助开发人员检测潜在问题他们的代码。要在 C 中启用彻底且详细的警告,请考虑以下建议:
基本警告:
- -迂腐:遵守严格C语言标准。
- -Wall:激活所有普遍接受的warnings.
- -Wextra:将警告范围扩大到-Wall之外。
- -Wcast-align:检测未对齐的指针强制转换。
- -Wcast-qual:警告指针类型的变化qualifiers.
- -Wctor-dtor-privacy:突出显示类构造函数和析构函数访问修饰符的问题。
- -Wdisabled-optimization:识别代码可以优化但不能优化。
- -Wformat=2:改进格式说明符编译期间的处理。
- -Winit-self:防止变量重新初始化为自身。
- -Wlogic-op:检测潜在的运算符优先级issues.
- -Wmissing-declarations:警告变量和变量的缺失声明函数。
- -Wmissing-include-dirs:突出显示缺少的包含目录。
- -Wnoexcept:鼓励异常处理机制。
- -Wold-style-cast:识别潜在的代码兼容性issues.
- -Woverloaded-virtual:警告虚拟方法重载。
- -Wredundant-decls:指出冗余声明。
- -Wshadow:防止无意的阴影变量。
- -Wsign-conversion:检测可能的符号转换错误。
- -Wsign-promo:突出显示潜在的符号提升问题。
- -Wstrict-null-sentinel:通过控制空哨兵增强代码安全性
- -Wstrict-overflow=5:将整数溢出级别限制为五个警告。
- -Wswitch-default:确保全面switch 语句处理。
- -Wundef:警告未定义的变量或宏。
- -Wno-unused:排除未使用的变量警告,以增强对更关键问题的关注。
可选但有问题的警告:
- -Wdisabled-optimization:可能表示次优代码,但不一定是错误。
- -Wfloat-equal:可能会导致安全相等比较误报。
- -Wold-style-cast:第三方库中可能出现误报。
- -Wsign-conversion:需要仔细注意数据类型以防止错误。
- -Wsign-promo:与 -Wsign-conversion 类似的注意事项。
- -Wswitch-default:强制显式处理 switch 语句情况,但可能很乏味。
警告排除:
由于潜在的误报或实用性有限,这些警告被省略:
- -Wabi:需要编译来自不同来源的二进制文件。
- -Waggregate-return:可能指示隐式数据类型conversions.
- -Wconversion:可能会生成无害隐式转换的警告。
- -Weffc :可能会被不相关的警告弄乱。
- -Winline:可能不适用于所有内联方法情景。
- -Winvalid-pch:不适用于不使用预编译头的项目。
- -Wmissing-format-attribute :需要不常用的 GNU 扩展。
- -Wpangled:需要手册类布局的优化。
- -Wstack-protector:需要特定的编译器标志进行堆栈保护。
- -Wstrict-aliasing=3:提供与较低级别相比,附加警告有限。
- -Wswitch-enum:限制过于严格,可能并不适合所有用例。
- -Wunsafe-loop-optimizations:在某些情况下会生成虚假警告。