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