Я читаю код эмулятора и возражаю против чего-то действительно странного:
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'
и он перечисляет постоянное целочисленное значение