看看这段C ++代码:
class Foo
{
int a;
public: Foo(int b): a(a) {}
};
显然,开发人员打算用a
而不是b
来初始化a
,这很难发现错误。
Clang ++会警告这个可能的错误,而GCC则不会,即使启用了其他警告:
$ clang++ -c init.cpp
init.cpp:5:27: warning: field is uninitialized when used here [-Wuninitialized]
public: Foo(int b): a(a) {}
^
$ g++ -Wall -Wuninitialized -Winit-self -c init.cpp
$
是否有可能为g ++启用相同的输出?
答案 0 :(得分:8)
使用更新的gcc :-)似乎对我有用:
stieber@gatekeeper:~$ g++ -Wall -Wuninitialized -Winit-self -c Test.cpp
Test.cpp: In constructor ‘Foo::Foo(int)’:
Test.cpp:5:9: warning: ‘Foo::a’ is initialized with itself [-Wuninitialized]
stieber@gatekeeper:~$ gcc --version
gcc (Debian 4.7.1-2) 4.7.1