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

2024-06-28

这个问题 https://stackoverflow.com/q/22963405/10396是关于让 gcc 编译器在您输入错误并用自身初始化变量时发出警告。

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

事实证明你需要-Winit-self flag http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/Warning-Options.html此外-Wuninitialized:

-Winit-self(仅限 C、C++、Objective-C 和 Objective-C++)警告未初始化的变量,这些变量已自行初始化。笔记 该选项只能与-Wuninitialized选项,其中 转仅适用于-O1以上。

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


看起来像这个错误报告关于用自身初始化的成员变量的警告 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18016对此有一个解释(强调我的):

我同意安德鲁的观点,a(a)错误应该总是警告,它应该独立于-Winit-self,它存在这样 -Wuninitialized 不会警告自初始化自动变量以消除警告的常见(但有问题)做法.

它可能被称为一种有问题的做法,因为它是C++ 中自初始化自动变量的未定义行为 https://stackoverflow.com/questions/14935722/does-initialization-entail-lvalue-to-rvalue-conversion-is-int-x-x-ubbug 报告是 C++ bug 报告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 -Winit-self 与 -Wuninitialized 分开 的相关文章

随机推荐