我正在阅读一些仿真器代码,并且已经发现了一些奇怪的东西:
switch (reg){
case 'eax':
/* and so on*/
}
这怎么可能?我以为您只能switch
使用整数类型。是否有一些宏观骗局?
int
,因此是合法的。但是,多字符常量的值是实现定义的,因此该代码可能无法在其他编译器上正常工作。例如,eax
可能是0x65
,0x656178
,0x65617800
,0x786165
,0x6165
,或别的东西。
'eax' != 'ebx'
当然,只要,它就只会使您的一个或两个示例失败。尽管可能在某些地方实际上采用了某些代码*(int*)("eax") == 'eax'
,因此大多数示例都失败了。
'eax'
可能比较等于'ebx'
或等于'ax'
,而switch语句将无法按预期工作。
'eax'
,它枚举常量整数值