Я думаю, что это не особенность, а артефакт того, как C обрабатывает switch
/ case
- просто серию прыжковых целей без ограничений по синтаксису. Вот почему устройство Даффа работает, и поэтому код, предшествующий первой 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 $LN1@main ; jump to case 0
jmp SHORT $LN4@main ; 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
$LN1@main: ; and here case 0
; Line 12
push OFFSET $SG756
call _printf
add esp, 4
$LN4@main:
; Line 15
xor eax, eax
mov esp, ebp
pop ebp
ret 0