GCC - 删除"is used uninitialized in this function"警告

gcc - removing "is used uninitialized in this function" warning

本文关键字:this in function 警告 uninitialized used 删除 is GCC      更新时间:2023-10-16

在将 -O2 -Wall 标志添加到 gcc (4.4.6) 后从警告中清除代码。我在某些遗留代码中有很多警告。这是演示问题的非常简化的版本:

 1 #include <cstdio>
  2
  3 bool init(bool& a)
  4 {
  5     return true;
  6 }
  7
  8 int main()
  9 {
 10     bool a;
 11
 12     if (!init(a))
 13     {
 14         return 1;
 15     }
 16
 17     if (a)
 18     {
 19         printf("okn");
 20     }
 21 }

当将其编译为"gcc main.cpp-O2 -Wall"时,我收到:

 main.cpp:17: warning: `a' is used uninitialized in this function

在实际代码中,init() 仅在初始化 "a" 时才返回 true,因此未初始化的 "a" 没有任何用处。

可以执行 Whan 来修复警告。

bool a;更改为bool a = false;将删除此警告。

编译器不会知道init(a)是"初始化"的,它只看到程序尝试调用具有未初始化变量的函数。

如果您不想用某个值初始化变量,则可以使用 GCC 的诊断编译指示:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
   if( a )
#pragma GCC diagnostic pop

如果您的代码在初始化所有内容时存在性能问题,这可能很方便。当然,在您的示例中,使用 bool a = false; 显然是更好的选择。

int main()
{
    bool a = false;
    ...

始终初始化所有变量!

将 -Wno-uninitialized 添加到编译选项