3

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

#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

4 回答 4

4

我刚试过,clang可以帮忙找bug:

[~]$ 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;
           ~~~~~~~~~        ^~~~~~~~~
于 2013-06-20T11:38:20.217 回答
3

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

在 GCC 和 CLANG 中,您可以使用-Winit-self I am not sure about MSVC,但使用 /W4 编译也可能会给您一个警告。

于 2013-06-20T09:51:05.343 回答
3

GCC 对这种情况有警告:

$ 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]
于 2013-06-20T10:00:20.270 回答
0

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

于 2013-06-20T09:59:28.133 回答