为什么-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 ++错误报告。