Comme d'autres l'ont dit, c'est un int
constante et sa valeur réelle est mise en œuvre définies.
Je suppose que le reste du code ressemble à quelque chose comme
if (SOMETHING)
reg='eax';
...
switch (reg){
case 'eax':
/* and so on*/
}
Vous pouvez être sûr que " eax "dans la première partie a la même valeur que" eax " dans la deuxième partie, de sorte que tout cela fonctionne, non? ... mal.
Dans un commentaire de @Davislor quelques listes de valeurs possibles pour 'eax':
... 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, ou quelque chose d'autre
Avis de la première valeur potentielle? C'est juste 'e'
, en ignorant les deux autres personnages. Le problème est que le programme utilise probablement 'eax'
, 'ebx'
,
et ainsi de suite. Si toutes ces constantes ont la même valeur que 'e'
vous vous retrouvez avec
switch (reg){
case 'e':
...
case 'e':
...
...
}
Cela n'a pas l'air trop bon, n'est ce pas?
La bonne partie de la mise en œuvre "défini", c'est que le programmeur peut vérifier la documentation de leur compilateur et voir si il fait quelque chose d'intelligent avec ces constantes. Si elle le fait, à la maison gratuitement.
La mauvaise partie est que certains autres pauvre diable peut prendre le code et essayer de le compiler en utilisant un autre compilateur. Instant erreur de compilation. Le programme n'est pas portable.
Comme @zwol souligné dans les commentaires, la situation n'est pas tout à fait aussi mauvais que je pensais que, dans les mauvais cas, le code ne se compile pas. Cela permettra au moins de vous donner un nom exact du fichier et le numéro de ligne pour le problème. Encore, vous n'aurez pas un programme de travail.