Estou lendo um código de emulador e rebati algo realmente estranho:
switch (reg){
case 'eax':
/* and so on*/
}
Como isso é possível? Achei que você pudesse apenas switch
nos tipos integrais. Existe algum truque macro acontecendo?
int
, então é legal. No entanto, o valor de uma constante de vários caracteres é definido pela implementação, portanto, o código pode não funcionar como esperado em outro compilador. Por exemplo, eax
pode ser 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, ou qualquer outra coisa.
'eax' != 'ebx'
, é claro, falhe apenas um ou dois de seus exemplos. Embora possa haver algum código em algum lugar que, de fato *(int*)("eax") == 'eax'
, assume e, portanto, falha na maioria dos seus exemplos.
'eax'
pode comparar igual a 'ebx'
ou a 'ax'
, e a instrução switch não funcionaria conforme o esperado.
'eax'
e enumera o valor inteiro constante