int a=4;
int b=4;
int main()
{
switch(a)
{
case 1:
{
case 4:
b=7;
case 5:
b=8; //added newly to check in disassembly
}
break;
}
printf("%d",b);
return 0;
}
En este código, el valor de "b" impreso es 8. ¿Por qué el código ejecuta la declaración del caso interno, aunque no se cumple la condición del caso externo? ¿El conmutador se comporta directamente como una etiqueta de Goto independientemente de dónde se haya colocado la etiqueta de la caja?
Update: Disassembly code
25: switch(a)
26: {
27: case 1:
28: {
0x00000200 481A LDR r0,[pc,#104] ; @0x0000026C
0x00000202 6800 LDR r0,[r0,#0x00]
0x00000204 2801 CMP r0,#0x01
0x00000206 D004 BEQ 0x00000212
0x00000208 2804 CMP r0,#0x04
0x0000020A D003 BEQ 0x00000214
0x0000020C 2805 CMP r0,#0x05
0x0000020E D109 BNE 0x00000224
0x00000210 E004 B 0x0000021C
29: case 4:
0x00000212 BF00 NOP
30: b=7;
0x00000214 2007 MOVS r0,#0x07
0x00000216 4916 LDR r1,[pc,#88] ; @0x00000270
0x00000218 6008 STR r0,[r1,#0x00]
31: case 5:
0x0000021A BF00 NOP
32: b=8;
33:
34: }
0x0000021C 2008 MOVS r0,#0x08
0x0000021E 4914 LDR r1,[pc,#80] ; @0x00000270
0x00000220 6008 STR r0,[r1,#0x00]
35: break;
36: }
37: