我有一段以下形式的代码:
typedef enum {A=1,B} EnumType;
int foo (EnumType x)
{
int r;
switch (x) {
case A:
r = 1;
break;
case B:
r = 2;
break;
/*
default:
r = -1;
break;
*/
}
return r;
}
我使用 GCC 6.3.0 进行编译并收到警告:
$ gcc --version
gcc (MacPorts gcc6 6.3.0_2) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ gcc -c -Wall -O1 test.c
test.c: In function 'foo':
test.c:20:10: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized]
return r;
^
该代码对我来说似乎很安全,并且确实有一些讨论GCC 通过此警告产生误报.
这是一个虚假的警告吗?
更多相关信息:
- 添加注释掉的内容
default:
阻止解决警告
- 警告不会出现
-O0
这个警告是完全正确的,因为enum
type 不限制在此定义的成员的可能值enum
-- 它可以代替any基础整数类型的值。所以没有default
在你的交换机中分支,你确实可以使用r
未使用您显示的代码进行初始化。
我可以重现缺少的警告gcc
and -O0
问题中显示了确切的代码,所以在我看来这就像一个错误gcc
。无论优化级别如何,都应该发出警告。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)