本帖最后由 voidx 于 2010-6-15 10:59 编辑
#include <stdio.h>
int main()
{
if((unsigned int)(-2)==(int)(-2))
{
printf("((unsigned int)(-2)==(int)(-2)) is true");
}
else
{
printf("((unsigned int)(-2)==(int)(-2)) is false");
}
while (1);
}
根据标准C规定,==运算符,左右两边操作数会进行“Usualarithmetic conversions”,
根据标准C Usualarithmetic conversions规则,
这里int要转换成unsigned int
if((unsigned int)(-2)==(int)(-2))
相当于:
if((unsigned int)(-2)==(unsigned int)((int)(-2)))
恒为真。
测试结果:
iaravr,iatstm8,iararm,iar430,iar8051
avrgcc,VC6.0,
都是真,符合标准C规则。
comsic为假,不符合标准C规则。 |