为什么 clang -Wunused-member-函数不警告未使用的成员函数?

Why doesn't clang -Wunused-member-function warn about an unused member function?

本文关键字:函数 成员 未使用 clang -Wunused-member- 为什么 警告      更新时间:2023-10-16

我正在编译一个非常基本的程序,试图触发-Wunused-member-function的输出。

test.cpp:

#include <iostream>
class A {
public:
void foo() { std::cout << "Called foo" << std::endl; }
void foo_unused() { std::cout << "Unused foo" << std::endl; }
};
int main() {
A obj;
obj.foo();
return 0;
}

以下命令的输出

clang++-std=c++17-Wall-Wunused-Wunused成员函数\-无核函数-无核成员函数\test.cpp-o测试

不幸的是,它甚至没有包含一个警告。我希望编译器警告foo_unused没有被使用。

我在这里错过了什么不同的行为吗?否则,clang为什么不抱怨未使用的成员函数呢?

您必须将类放在一个匿名命名空间中才能显示警告:

namespace
{
class A {
public:
void foo() { std::cout << "Called foo" << std::endl; }
void foo_unused() { std::cout << "Unused foo" << std::endl; }
};
}

您可以看到,现在您有了警告:https://godbolt.org/z/15Buo-

原因是这个版本也可以激活公共方法上的clang检查,正如您明确指出的那样,这个类在另一个翻译单元中是不可访问的。