IAR 的一个警告546

Warning :546: transfer of control bypasses initialization of:
Example:
int main(void){
int choice = 1;
int z =1;
switch(choice)
{
case 1:
int y = 1;
z = y + z;
break;
case 2:
break;
}
return 0;
Here, ‘y’ is an initialized variable that is in scope (but unused) in the other cases. The C++ Standard says in section 6.7: “It is possible to transfer into a block, but not in a way that bypasses declarations with initialization. A program that jumps *) from a point where a local variable with automatic storage duration is not in scope to a point where it is in scope is ill-formed unless the variable has POD type (3.9) and is declared without an initializer (8.5).”
*) The transfer from the condition of a switch statement to a case label is considered a jump in this respect.
The usual way to fix this is to enclose the case that declares ‘y’ in braces:
case 1:
{
int y = 1;
z = y + z;
}
break;
“y” is a POD (Plain Old Data) type, so an alternative would be to not use initialization:
case 1:
int y;
y = 1;
z = y + z;
break;
原文在此:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0434a/index.html

在contiki 的lib->ringbuf.c 的 ringbuf_get() 函数中因 变量 c 可能不会被初始化而导致错误,将 c 声明时赋予 0 即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值