Art*_*dov 5 c++ gcc static-analysis
未初始化的原始成员有一个常见的C++错误:
#include <iostream>
class A {
public:
int x;
};
int main() {
A a;
std::cout << a.x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
a.x将是未初始化的.我明白为什么会发生这种情况,并希望找到解决此类错误的解决方案.我检查了gcc和cppcheck,他们没有报告这些成员.
编辑
用标志检查gcc-Wall -Wextra -Werror -pedantic -Wold-style-cast -Wconversion -Wsign-conversion -Wunreachable-code
检测到错误的第一个版本的gcc是5.1.g ++ - 4.9没有检测到它,clang ++ - 3.6也失败了.
是的他们确实 ......有点:
main.cpp: In function 'int main()':
main.cpp:10:18: warning: 'a.A::x' is used uninitialized in this function [-Wuninitialized]
std::cout << a.x;
^
0
Run Code Online (Sandbox Code Playgroud)
在上面的链接示例中,我正在使用GCC 5.1 trunk -Wall.
打开更多GCC警告和/或升级.
还经过测试,发现没有警告:
老实说,我不确定你还能做什么.您可以创建一个工具来执行此操作,但之后您将创建一个编译器或静态分析器.:)
所以,我想,只希望知道如何做到这一点的人赶上......