我想检查是否存在一个g++编译器标志来警告我nullpointer-derefecting。使用g++ (GCC) 13.1.1
和这些编译器标志编译此代码时:-Wnull-dereference,-Wnonnull,仍然没有任何React。没有警告,没有错误。
#include <iostream>
auto main([[maybe_unused]] int argc, [[maybe_unused]] char ** argv) -> int {
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***,它们成功地报告了这类问题。但是我想只依赖于编译标志。
2条答案
按热度按时间bhmjp9jg1#
从
-Wnull-dereference
的文档中:此选项仅在-fdelete-null-pointer-checks处于活动状态时才处于活动状态,大多数目标中的优化都启用了此选项。警告的精度取决于所使用的优化选项。
启用优化(
-O1
就足够了),你会得到警告。-Wnonnull
做了完全不同的事情。(另请参阅上面的文档链接。)-Wanalyzer-*
选项仅在您启用-fanalyzer
静态分析器时生效,并且它们是默认值。这些选项用于-Wno-*
表单中,以禁用特定的静态分析器检查。参见documentation as well。n6lpvg4x2#
真的没有办法做到吗?
通过启用如below所示的优化:
Working demo
正如您在使用优化标志时所看到的,您将得到所需的警告。