为什么-Winit-self与-Wuninitialized分开

这个问题是关于让gcc编译器在输入拼写错误并用自己初始化变量时发出警告。

int f() { int i = i; return i; } 

事实certificate除了-Wuninitialized之外你还需要-Winit-self标志 :

-Winit-self-Winit-self C,C ++,Objective-C和Objective-C ++)警告用自己初始化的未初始化变量。 请注意,此选项只能与-Wuninitialized选项一起使用,而该选项仅适用于-Wuninitialized及更高版本。

我的问题是:为什么这不是-Wuninitialized的默认行为? 你想要警告未初始化变量的用例是什么,而不是自我初始化的变量,这同样麻烦?

看起来这个bug报告警告关于用它自己初始化的成员变量有一个解释( 强调我的 ):

我同意安德鲁,a(a)错误总是应该警告,它应该独立于-Winit-self,它的存在使得-Wuninitialized不会警告自动初始化自动变量的常见(但可疑)实践沉默警告

它可能被称为一个有问题的实践,因为它是C ++中未定义的行为来自我初始化一个自动变量 ,而bug报告是一个C ++错误报告。