我写了一些像这样的错误代码:
#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是一个未初始化的字符串。
是否有任何静态检查工具可以帮助找到这种错误?
答案 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感到高兴。它会发现这种类型的错误,但在与现有的更大代码库一起使用时可能需要一些时间来配置它。