Я читаю код эмулятора и возражаю против чего-то действительно странного:
switch (reg){
case 'eax':
/* and so on*/
}
Как это возможно? Я думал, что можно только switchна целочисленных типах. Происходят ли какие-то макросы?
int, поэтому она разрешена. Однако значение многосимвольной константы определяется реализацией, поэтому код может работать не так, как ожидалось, в другом компиляторе. Например, eaxможет быть 0x65, 0x656178, 0x65617800, 0x786165, 0x6165, или что - то еще.
'eax' != 'ebx', конечно, он не подходит только для одного или двух ваших примеров. Хотя где-то может быть какой-то код, который фактически предполагает *(int*)("eax") == 'eax'и, следовательно, не работает в большинстве ваших примеров.
'eax'можно сравнить «равно» 'ebx'или «с» 'ax', и оператор switch не будет работать должным образом.
'eax'и он перечисляет постоянное целочисленное значение