标签: clang-tidy

clang-tidy报告未知警告

我有使用GCC构建的CMake。我生成了compile_commands.json然后运行了clang-tidy但我得到了数百个:

error: unknown warning option '-Wno-maybe-uninitialized'; did you mean '-Wno-uninitialized'? [clang-diagnostic-unknown-warning-option]
error: unknown warning option '-Wno-psabi' [clang-diagnostic-unknown-warning-option]
Run Code Online (Sandbox Code Playgroud)

如何禁用或删除这些警告?我看到了clang ++警告:“警告:未知警告选项'-Wno-maybe-uninitialized'”,但添加“ -Wno-unknown-warning-option”却给我一个错误:

run-clang-tidy-3.8.py: error: unrecognized arguments: -Wno-unknown-warning-option
Run Code Online (Sandbox Code Playgroud)

c++ cmake clang-tidy

6
推荐指数
1
解决办法
1067
查看次数

在 CUDA 源文件上使用 clang-tidy

存在几种为 C/C++ 设计的静态分析工具,但它们对于测试 CUDA 源并不是特别有用。

由于clang 版本 6能够编译 CUDA,我想检查使用 clang-tidy 的选项,它似乎没有切换架构的选项。

有办法让它发挥作用吗?例如,用于打开 CUDA 解析器的编译时开关、自定义检查形式的扩展,或者可能是计划中的功能?

c++ static-analysis cuda clang clang-tidy

6
推荐指数
1
解决办法
1661
查看次数

Clang 与 Clang tidy 是否检测到相同的警告和错误?

据我所知,Clan-tidy 可以 在默认检查集(clang-analysisr)之上执行这些检查https://clang.llvm.org/extra/clang-tidy/checks/list.html并且 Clang 也可以检测错误和警告 https://clang.llvm.org/docs/DiagnosticsReference.html 他们可以检测到不同的错误或警告列表吗?
Clang-Tidy 在后台使用 Clang 吗?两者之间有什么联系吗?

c++ linux clang clang-tidy

6
推荐指数
1
解决办法
3305
查看次数

clang-tidy -fix 不应用任何更改

我正在clang-tidy使用以下命令运行:

run-clang-tidy.py -checks="-*,cppcoreguidelines-*,hicpps-*" -header-filter=".*" -fix"
Run Code Online (Sandbox Code Playgroud)

(或者clang-tidy -checks="-*,cppcoreguidelines-*,hicpps-*" -header-filter=".*" -fix"也可以)

这会返回很多错误。自从我添加了该选项以来,它还applying fixes...在终端中显示-fix

我的问题是cppcoreguidelines-*hicpps-*修复未应用,仅显示。我选择不支持修复我的 1000 个问题的检查吗?

clang-tidy

6
推荐指数
1
解决办法
7309
查看次数

有没有办法对clang-format / clang-tidy中的类成员/方法强制使用“ this->”?

我到处搜索,但可能使用了错误的术语。我还没有找到一个选择。

我发现的唯一问题是这个未解决的问题(但是范围更广):CPP棉绒:您可以对类变量强制使用它吗?

c++ clang-format clang-tidy

6
推荐指数
1
解决办法
181
查看次数

clang-tidy 的 bugprone-exception-escape 在 MSVC STL 中表现得很奇怪

我在一个项目中使用 clang-tidy 10,它在带有 MSVC STL 的 Windows 上表现得很奇怪。一个最小的例子如下:

#include <iostream>
#include <stdexcept>

int main()
{
    try {
        throw std::runtime_error {"Boom!"};
    } catch (...) {
        std::cerr << "Unexpected non-exception error!\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我告诉它包含检查 bugprone-exception-escape,它会告诉我函数“main”中可能会引发异常。但是,如果我使用以下命令将行流更改为 std::cerr ,则检查不会引起投诉:

std::cerr << "Unexpected non-exception error!\n" << std::flush;
Run Code Online (Sandbox Code Playgroud)

我假设一个语句中的两个连续流操作是导致不同行为的原因,因为以下确实会引发问题。

std::cerr << "Unexpected non-exception error!\n";
std::cerr << std::flush;
Run Code Online (Sandbox Code Playgroud)

我注意到 clang-tidy 不会抱怨 Linux 上的任何这些示例,至少如果我传递 -stdlib=libc++ 的话。我是否遗漏了一些奇怪的微妙之处,或者这是 clang-tidy 和/或 MSVC 的 STL 实现中的错误?

c++ visual-c++ clang-tidy

6
推荐指数
1
解决办法
2005
查看次数

clang-tidy 建议我删除 const 引用,为什么?

我在一个项目树上运行了 clang-tidy(“现代化”模块),我一直在努力使 C++17 保持合理的最新状态。它纠正的几乎所有内容对我来说都不足为奇,除了一件事:它改变了所有这些类型的结构:

void foo(const std::string& str) {
}
Run Code Online (Sandbox Code Playgroud)

..对此:

void foo(std::string str) {
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么。在我未经训练的眼睛看来,这意味着两件事:

  1. 它需要复制对象而不是仅仅传递引用。(尽管我假设在某些情况下,编译器可以推断出它在生成代码时可以只传递一个指针——但引用使其明确(恕我直言更好))。
  2. const 用于告诉函数体开发人员它不应该更改输入字符串,并且如果需要修改字符串,则需要将其自己的副本存储在某处。

不过,我确实看到了一个好处——通过将一个对象作为const引用传递,它只是一个“删除常量”,无论如何都不会被改变,所以我想通过值传递可以解决这个问题。

为什么它建议删除带有非常量传递值的常量引用?

c++ c++17 clang-tidy

6
推荐指数
1
解决办法
533
查看次数

clang-tidy vs 结构化绑定

在 ubuntu 20.04 (10.0.0) 中打包的 clang-tidy 似乎在一个相当简单的代码块上窒息,它涉及结构化绑定和移动操作:

#include <memory>
#include <tuple>

struct T {
  ~T() {
    if(ptr != nullptr) { // clang-tidy is convinced ptr is uninitialized when the tuple is destroyed.

    }
  }

  T(T&& rhs) : ptr(rhs.ptr) {
    rhs.ptr = nullptr;
  }

  // Be very explicit for the sake of the MCVE.
  T() = default;
  T(const T&) = delete;
  T& operator=(T&&) = delete;
  T& operator=(const T&) = delete;

  int* ptr = nullptr;
};

std::tuple<T, T> foo();

void bar() { …
Run Code Online (Sandbox Code Playgroud)

c++ c++17 clang-tidy

6
推荐指数
0
解决办法
211
查看次数

clang-tidy 中的“AnalyzeTemporaryDtors”选项是什么意思?

clang-tidy --dump-config命令产生如下内容:

---
Checks:          'clang-diagnostic-*,clang-analyzer-*'
WarningsAsErrors: ''
HeaderFilterRegex: ''
AnalyzeTemporaryDtors: false
FormatStyle:     none
User:            [...]
CheckOptions:
  - key:             [...]
    value:           [...]
[...]
Run Code Online (Sandbox Code Playgroud)

该选项的含义是什么AnalyzeTemporaryDtors?设置为 后会发生什么变化true?所有其他选项都有记录,但我找不到与此相关的任何文档,并且我找不到更改该选项值的任何差异。

clang-tidy

6
推荐指数
1
解决办法
1235
查看次数

理解“顶层的‘const’,这可能会降低代码的可读性,而不会提高 const 的正确性”

请考虑下面的代码,特别是观察get_length返回const size_t.

#include <stdio.h>

const size_t get_length(void)
{
    return 123;
}

void foo(void)
{
    size_t length = get_length();
    length++;
    
    printf("Length #1 is %zu\n", length);
}

void bar(void)
{
    // Still 123 because length was copied from get_length
    // (copy ellision notwithstanding, which is not the point here)
    size_t length = get_length();
    
    printf("Length #2 is %zu\n", length);
}

int main(void) {
    foo();
    bar();
}
Run Code Online (Sandbox Code Playgroud)

输出:

Length #1 is 124
Length #2 is 123
Run Code Online (Sandbox Code Playgroud)

我从 clang-tidy 收到以下警告:

Clang-Tidy: …
Run Code Online (Sandbox Code Playgroud)

c const-correctness clang-tidy

6
推荐指数
1
解决办法
5711
查看次数