为什么 clang -Wunused-member-函数不警告未使用的成员函数?
Why doesn't clang -Wunused-member-function warn about an unused member function?
我正在编译一个非常基本的程序,试图触发-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检查,正如您明确指出的那样,这个类在另一个翻译单元中是不可访问的。
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针