Bazı emülatör kodunu okuyorum ve gerçekten tuhaf bir şeye karşı çıktım:
switch (reg){
case 'eax':
/* and so on*/
}
Bu nasıl mümkün olabilir? Sadece switch
integral türlerinde yapabileceğini düşündüm . Devam eden bazı makro hileler var mı?
int
, bu yüzden yasaldır. Ancak, çok karakterli bir sabitin değeri uygulama tanımlıdır, bu nedenle kod başka bir derleyicide beklendiği gibi çalışmayabilir. Örneğin, eax
olabilir 0x65
, 0x656178
, 0x65617800
, 0x786165
, 0x6165
, başka bir şey.
'eax' != 'ebx'
Tabii ki olduğu sürece , örneklerinizden sadece bir veya ikisinde başarısız olur. Bununla birlikte, bir yerde gerçekte varsaydığı *(int*)("eax") == 'eax'
ve bu nedenle örneklerinizin çoğunda başarısız olan bazı kodlar olabilir .
'eax'
eşittir 'ebx'
veya ile karşılaştırabilir 'ax'
ve switch ifadesi istendiği gibi çalışmayabilir.
'eax'
ve sabit tamsayı değerini numaralandırır