文档目录

一、比 Clang-Tidy 更深层的分析

Clang-Tidy 是"模式匹配"(找常见的代码模式问题),Clang Static Analyzer 是符号执行(模拟代码的执行路径)。

# 方法 1:用 scan-build 替代编译命令
scan-build make -j4

# 方法 2:直接分析单个文件
clang --analyze source.cpp -std=c++17

二、它能找到 Clang-Tidy 找不到的问题

// 1. 资源泄漏
void leak_example() {
    FILE* f = fopen("data.txt", "r");
    // 忘了 fclose(f)
    // clang-tidy 不会报告,但 scan-build 会标记"资源泄漏"
}

// 2. 野指针路径
void branch_bug(bool condition) {
    int* p = nullptr;
    if (condition) {
        p = new int(42);
    }
    // 如果 condition = false,p 还是 nullptr
    *p = 0;  // scan-build 警告:possible null pointer dereference
}

// 3. 死代码(Dead code)
bool always_true(int x) {
    if (x > 0) {
        return true;
    }
    return true;  // 永远不会执行的代码
}