switch(flag)
{
case: 0
int value = 0;
test(value);
break;
case:1
...
break;
case:2
...
break;
default:
break;
}
在使用Keil编译代码的时候出现了下面的警告信息:
App\src\xxx.c(4): warning: #546-D: transfer of control bypasses initialization of:
出现此警告的原因:
1、代码可能会跳过某些变量的初始化,从而使得程序访问未初始化的变量,造成崩溃。
2、在switch语句中定义了变量value,编译器会告诉"变量跳过初始化"警告。
解决方案1:将分支代码放入括号{}内,修改代码如下:
switch(flag)
{
case: 0
{
int value = 0;
test(value);
}
break;
case:1
...
break;
case:2
...
break;
default:
break;
}
解决方案2:将变量value声明写在switch之前,修改代码如下:
switch(flag)
{
int value = 0;
case: 0
test(value);
break;
case:1
...
break;
case:2
...
break;
default:
break;
}
解决方案3:将switch语句改成if/else。