Creo que esto es menos una característica de un artefacto de cómo trata a C switch
/-as case
sólo una serie de destinos de salto y sin restricciones en la sintaxis. Es por eso que Duff's device funciona y esa es la razón por la cual el código antes del primer case
no se ejecutará.
Si nos fijamos en el conjunto generado verá que el código sólo se saltó:
mov ecx, DWORD PTR _x$[ebp]
mov DWORD PTR tv64[ebp], ecx
cmp DWORD PTR tv64[ebp], 0 ; here begins the switch
je SHORT [email protected] ; jump to case 0
jmp SHORT [email protected] ; jump out of the switch
; Line 8
mov DWORD PTR _a$752[ebp], 42
; Line 9
mov edx, DWORD PTR _a$752[ebp] ; here we have the dead code
push edx
push OFFSET $SG754
call _printf
add esp, 8
[email protected]: ; and here case 0
; Line 12
push OFFSET $SG756
call _printf
add esp, 4
[email protected]:
; Line 15
xor eax, eax
mov esp, ebp
pop ebp
ret 0
pruébalo y mira ??????????? –
Probé muchos ejemplos diferentes y el de arriba es solo para aclarar. Pero siempre hay una posibilidad de que me haya perdido una característica de (GNU) C y se puede hacer algo en esta región. – tur1ng