您的位置:首页 > 编程语言 > C语言/C++

C语言中switch case的类型比较机制

2014-08-22 19:10 330 查看
看下面的代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: