Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么';t clang-Wunused成员函数警告未使用的成员函数?_C++_Clang_Compiler Warnings - Fatal编程技术网

C++ 为什么';t clang-Wunused成员函数警告未使用的成员函数?

C++ 为什么';t clang-Wunused成员函数警告未使用的成员函数?,c++,clang,compiler-warnings,C++,Clang,Compiler Warnings,我正在编译一个非常基本的程序,试图从-Wunused成员函数触发输出 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

我正在编译一个非常基本的程序,试图从
-Wunused成员函数
触发输出

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;
}
#包括
甲级{
公众:

void foo(){std::cout必须将该类置于匿名命名空间中才能显示警告:

namespace
{
class A {
    public:
    void foo() { std::cout << "Called foo" << std::endl; }
    void foo_unused() { std::cout << "Unused foo" << std::endl; }
};
}
名称空间
{
甲级{
公众:

void foo(){std::cout's public?如果将
void foo_unused()
private设置为private,则尝试将其设置为private-它将按预期工作。因为
foo_unused
是公共类成员(类型接口)这是没有错的。编译器/链接器在做“代码>死代码消除< /代码>优化时,将简单地删除它。问题是,公共方法可以从任何地方使用。所以没有办法在一个编译单元中检查它。它需要在链接阶段完成,而不是编译阶段。@亚当根据C++时You定义一个类(struct,union)——您定义的是一个类型,而不是这种类型的对象(比如
obj;
)所以,根据C++语言,一个类是完全正确的,因为没有任何错误的类型A。谢谢,这确实有效。我想知道有没有方法来检查一个大项目在链接阶段。我不认为有任何类似的可用。至少没有我知道:(@Adam Linker在任何情况下都不会将未使用的代码包含到二进制文件中,因为如果您的类不是共享库/DLL的一部分。如果您启用完整程序优化,即LTO,则Linker将警告您。我理解,但我也想从代码中删除未使用的函数,因此我想在我的项目中查看实际未使用的函数。@VictorGub在中,我尝试启用LTO并添加所有可能的警告标志,但没有显示任何警告。
namespace
{
class A {
    public:
    void foo() { std::cout << "Called foo" << std::endl; }
    void foo_unused() { std::cout << "Unused foo" << std::endl; }
};
}