9

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

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

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

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

可以做些什么来修复警告。

4

4 回答 4

13

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

编译器不知道init(a)是为了“初始化一个”,它只看到程序试图调用一个带有未初始化变量的函数。

于 2013-10-15T05:54:58.563 回答
10

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

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

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

于 2013-10-15T05:59:47.443 回答
7
int main()
{
    bool a = false;
    ...

始终初始化所有变量!

于 2013-10-15T05:55:04.677 回答
2

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

于 2013-10-15T06:07:55.890 回答