C语言中switch case的类型比较机制
2014-08-22 19:10
330 查看
看下面的代码:
最终输出的应该是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
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
相关文章推荐
- javascript - switch里case比较显示为强类型特性
- C语言中switch case语句的实现(switch case 和 else if 的比较、区别)
- C语言中的switch case比较
- C语言中switch case语句的实现
- C语言的 Switch Case 的小问题
- switch中case语句的可用类型
- switch中case...用法-c语言
- java switch中case可接受的类型
- C语言与JAVA语言中基本数据类型长度的比较
- C语言拾遗(五):分析switch语句机制
- C语言拾遗(五):分析switch语句机制---下篇
- C语言中switch case语句的实现
- JavaScript中switch...case语句与if...else性能比较
- C语言之if...else PK switch...case
- PHP下switch-case 和 if-else效率的比较
- C语言学习2:sizeof ,数据类型,scanf,算式操作,赋值与比较操作,逻辑操作,位的操作,条件运算符,特异赋值结果,强制转换,使用变量要注意的
- C语言 if...else PK switch...case
- 枚举类型 和 if switch case
- 不同类型变量与零值的比较 【C语言规范】
- enum枚举类型赋值之switch语句与显示类型转换(Explicit Type Conversion)速度之比较