我正在编译一个非常基本的程序,以检查-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-member-function -Wunused-function -Wunneeded-member-function test.cpp -o test
不幸的是,我还没有收到任何警告。我希望编译器警告foo_unused
未被使用。
我在这里想念其他行为吗?否则,为什么不抱怨未使用的成员函数?
答案 0 :(得分:3)
您必须将类放置在匿名名称空间中,以使警告出现:
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检查,正如您明确地说过的那样,在另一个翻译单元中将无法访问此类。