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 即可。