在向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修复警告。
答案 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添加到您的编译选项