Я думаю, что это меньше, чем особенность артефакта как C лечит switch
/case
-как только ряд целей прыжковых без ограничений по синтаксису. Вот почему работает Duff's device, и поэтому код до первого case
никогда не будет работать.
Если посмотреть на сгенерированный сборки, вы увидите, что код будет просто перепрыгнул:
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
попробуйте его и посмотрите ??????????? –
Я пробовал много разных примеров, и один из них просто разъясняет. Но всегда есть шанс, что я пропустил функцию (GNU) C, и что-то можно сделать в этом регионе. – tur1ng