如何找到没有效果的作业?

Ole*_*ann 5 c++ warnings visual-c++

在自动重命名大项目中的许多变量的过程中,我可能已经创建了很多这样的东西:

class Foo {
    int Par;
    void Bar(int Par) {
        Par = Par;       // Nonsense
    }
};
Run Code Online (Sandbox Code Playgroud)

现在我需要识别这些位置以纠正它们.例如,进入"this-> Par = Par;".不幸的是,即使有所有警告,Visual C++编译器也没有给我任何评论.我记得有一次警告它.它说"代码没有效果"或其他什么.但它似乎已经消失,可能是因为有些人使用这种做法来避免"未引用的参数"警告.有没有办法重新激活该警告?海湾合作委员会在这里警告吗?任何的想法?

Jos*_*ley 6

一些编译器可以生成警告:

  • 如果添加-Wshadow选项,GCC和Clang可以对这样的代码发出警告.(具体来说,虽然他们没有警告无意义的赋值,但他们警告局部变量Par遮蔽成员变量Par- 你可能会也可能不会这样.)
  • Embarcadero C++ Builder没有警告它Par = Par是无用的,但它可以警告Par它在分配后不会被使用,这应该满足你的需要.

我怀疑像PC-Lint这样的工具也可以识别这样的代码.

另一种解决方案是将您的参数标记为const:

class Foo {
    int Par;
    void Bar(const int Par) {
        Par = Par;       // Compiler error!
    }
};
Run Code Online (Sandbox Code Playgroud)

const传值参数不是函数签名的一部分,因此您只需将其添加到.cpp文件中的函数定义中,而不是文件中的函数声明.h.换句话说,这样做是合法的:

// foo.h
class Foo {
    int Par;
    void Bar(int Par);
};

// foo.cpp
void Foo::Bar(const int Par) { ... }
Run Code Online (Sandbox Code Playgroud)