gcc - 删除“在此函数中使用未初始化”警告

时间:2013-10-15 05:51:58

标签: c++ linux gcc

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

 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("ok\n");
 20     }
 21 }

当编译为“gcc main.cpp -O2 -Wall”时,我收到:

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

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

可以做Whan修复警告。

4 个答案:

答案 0 :(得分:10)

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

编译器不会知道init(a)意味着'初始化',它只会看到程序试图用未初始化的变量调用函数。

答案 1 :(得分:9)

如果您不想使用某个值初始化变量,可以使用GCC的diagnostic pragmas

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

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

答案 2 :(得分:7)

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

始终初始化所有变量!

答案 3 :(得分:5)

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