警告:“semantics of '>' change in ANSIC”的意思

来源:互联网 发布:数据库查询算法 编辑:程序博客网 时间:2024/05/21 22:54

这是某些编译器提出的警告,指出有些代码在ANSIC的“值保护” 规则下得到的结果可能跟老的“无符号保护”规则下得到的结果不同。

实际上改变的并不是>操作符的语义,而是当两个不同类型出现在二元操作符的两侧或者对短的整数类型进行提升时总是发生的隐式类型转换语义、(如果你觉得在表达式中没有使用任何无符号值,那么最可能是strlen函数,在标准C中,strlen返回size_t,无符号类型)


在实际应用中,当二元操作符的一个操作数是int 而另一个操作数可能是int 或unsigned int 型时,无符号和值保护规则的区别最大。如果一个操作数是unsigned int, 而另一个会被转换为这个类型-如果其值为负的话,这一定会导致不可预测的结果。


如果unsigned int 和int 出现在二元操作符两侧,则两个操作数都会转换为unsigned int。

0 0