即使是单个 g++ 标志也会警告空指针取消引用吗?

问题描述 投票:0回答:2

我想检查是否存在 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)可以成功报告此类问题。但我只想依赖编译标志。

c++ g++ compiler-flags
2个回答
2
投票

来自

-Wnull-dereference
的文档:

此选项仅在 -fdelete-null-pointer-checks 处于活动状态时才处于活动状态,这通过大多数目标中的优化来启用。警告的精度取决于所使用的优化选项。

启用优化(

-O1
就足够了),您将收到警告。

-Wnonnull
做了完全不同的事情。 (另请参阅上面的文档链接。)

-Wanalyzer-*
选项仅在您使用
-fanalyzer
启用静态分析器时才生效,然后它们是默认值。这些选项旨在以
-Wno-*
形式使用来禁用特定的静态分析器检查。另请参阅文档


1
投票

真的没有办法实现吗?

有,通过启用优化,如下所示

-O3 -Wnull-dereference

工作演示

正如您所看到的,使用优化标志,您会得到所需的警告。

© www.soinside.com 2019 - 2024. All rights reserved.