是否有任何静态检查工具来检查这样的错误代码

时间:2013-06-20 09:44:14

标签: c++ static-analysis

我写了一些像这样的错误代码:

#include "stdafx.h"
#include <string>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{

    string some_file = "afdfadf";

    if(true)
    {
        string some_file = "/"+ some_file;
    }

    return 0;
}

调用std :: operator +时会抛出异常。

我想这是因为在if语句中第二个some_file是一个未初始化的字符串。

是否有任何静态检查工具可以帮助找到这种错误?

4 个答案:

答案 0 :(得分:4)

我刚尝试过,clang可以帮助找到错误:

[~]$ clang bug.cpp 
bug.cpp:11:29: warning: variable 'some_file' is uninitialized when used within
      its own initialization [-Wuninitialized]
    string some_file = "/"+ some_file;
           ~~~~~~~~~        ^~~~~~~~~

答案 1 :(得分:3)

编译器可以警告您在自己的初始化中使用变量。

在GCC和CLANG中,您可以使用-Winit-self 我不确定MSVC,但用/ W4编译也可能会给你一个警告。

答案 2 :(得分:3)

海湾合作委员会对此案有警告:

$ g++ t.cc -Wshadow
t.cc: In function ‘int main(int, char**)’:
t.cc:11:16: warning: declaration of ‘some_file’ shadows a previous local [-Wshadow]
t.cc:7:12: warning: shadowed declaration is here [-Wshadow]

答案 3 :(得分:0)

我对使用pclint感到高兴。它会发现这种类型的错误,但在与现有的更大代码库一起使用时可能需要一些时间来配置它。