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 switchsui 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, eaxpotrebbe 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