Sto leggendo un codice di emulatore e ho contrastato qualcosa di veramente strano:
switch (reg){
case 'eax':
/* and so on*/
}
Com'è possibile? Pensavo potessi solo switch
sui tipi integrali. C'è qualche trucco macro in corso?
int
, quindi è legale. Tuttavia, il valore di una costante multi-carattere è definito dall'implementazione, quindi il codice potrebbe non funzionare come previsto su un altro compilatore. Ad esempio, eax
potrebbe essere 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, o qualcos'altro.
'eax' != 'ebx'
, ovviamente, fallisce solo uno o due dei tuoi esempi. Anche se potrebbe esserci del codice da qualche parte che in effetti presuppone *(int*)("eax") == 'eax'
e quindi non supera la maggior parte dei tuoi esempi.
'eax'
potrebbe confrontare uguale a 'ebx'
o a 'ax'
e l'istruzione switch non funzionerebbe come previsto.
'eax'
ed enumera un valore intero costante