Малые операторы switch реализованы с использованием таблиц переходов в сборке. Он использует ваш ввод x
, чтобы перейти к адресу и выполнить его, поэтому предположим, что мой ввод 5
, вот что происходит в сборке:
- move 5 to rax
- rax = rax * instruction size (8 in x64) + jump table base address
- jump to rax (which is an address containing my case instructions)
Теперь, что произойдет, если мой ввод отрицательное число? Я устал с g cc, и получается, что компилятор устанавливает отрицательное значение в 0
. Это нормальное поведение?