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