lang的-Wunused-member-function不起作用

时间:2019-01-21 11:34:26

标签: c++ clang compiler-warnings

我正在编译一个非常基本的程序,以检查-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未被使用。

我在这里想念其他行为吗?否则,为什么不抱怨未使用的成员函数?

1 个答案:

答案 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检查,正如您明确地说过的那样,在另一个翻译单元中将无法访问此类。