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 switchintegral 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, eaxolabilir 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