Estoy leyendo un código de emulador y he respondido a algo realmente extraño:
switch (reg){
case 'eax':
/* and so on*/
}
¿Cómo es esto posible? Pensé que solo podrías switch
en tipos integrales. ¿Hay algún truco macro?
int
, por lo que es legal. Sin embargo, el valor de una constante de varios caracteres está definido por la implementación, por lo que es posible que el código no funcione como se esperaba en otro compilador. Por ejemplo, eax
podría ser 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, o alguna otra cosa.
'eax' != 'ebx'
, por supuesto, solo falle uno o dos de sus ejemplos. Aunque puede haber algún código en algún lugar que de hecho asume *(int*)("eax") == 'eax'
y, por lo tanto, falla en la mayoría de sus ejemplos.
'eax'
podría comparar igual ao 'ebx'
a 'ax'
, y la instrucción de cambio no funcionaría como se esperaba.
'eax'
y enumera el valor entero constante