C語言中switch case的類型比較機制

看下面的代碼:

 

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。

 

參考:http://stackoverflow.com/questions/24079001/what-promoted-types-are-used-for-switch-case-expression-comparison

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章