看下面的代碼:
int func(char i)
{
switch(i)
{
case 0x82:
return 1;
default:
return 0;
}
}
int main()
{
unsigned char a=0x82;
ret=func(a);
if(ret==1)
{
printf("bingo");
}
else
{
printf("miss");
}
}
最終輸出的應該是bingo還是miss呢?
按照分析,在調用func函數中a會被強轉爲有符號數,也就是說func函數中i是一個負數,switch case 在比較時是將switch的變量和case的變量都轉換成int進行比較,負數與整數比較,應該返回0並打印miss。
在RHEL AS 6(內核版本2.6.18)上的測試結果也是這樣,但是在另外一種操作系統Great Turbo 10(內核版本2.6.9),func卻返回0,打印bingo。