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 switchnos 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, eaxpode 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