我想检查是否存在 g++ 编译器标志来警告我有关空指针取消引用的信息。当使用
g++ (GCC) 13.1.1
和这些编译器标志:-Wnull-dereference、-Wnonnull 编译此代码时,仍然没有任何反应。没有警告,没有错误..
#include <iostream>
int main() {
double *elem = new (std::nothrow) double;
elem = nullptr;
std::cout << *elem << '\n';
delete elem;
return 0;
}
所以我尝试了控制
static analysis
的选项:我只遇到了这两个:-Wanalyzer-null-argument,-Wanalyzer-null-dereference(仍然没有成功)。难道真的没有办法实现这个目标吗?请注意,我知道 clang-tidy 和其他静态分析工具(如 cpplint、clazy 和 cppcheck)可以成功报告此类问题。但我只想依赖编译标志。
-Wnull-dereference
的文档:
此选项仅在 -fdelete-null-pointer-checks 处于活动状态时才处于活动状态,这通过大多数目标中的优化来启用。警告的精度取决于所使用的优化选项。
启用优化(
-O1
就足够了),您将收到警告。
-Wnonnull
做了完全不同的事情。 (另请参阅上面的文档链接。)
-Wanalyzer-*
选项仅在您使用-fanalyzer
启用静态分析器时才生效,然后它们是默认值。这些选项旨在以 -Wno-*
形式使用来禁用特定的静态分析器检查。另请参阅文档。