C Yoda条件与整数提升

C Yoda条件与整数提升,c,integer-promotion,C,Integer Promotion,将大于int的类型与整数常量进行比较时,是否应将常量放在左侧或右侧,以确保执行正确的比较 int64_t i = some_val; if (i == -1) 或者应该是: if (-1 == i) 在任何情况下,这两种情况是否与比较-1LL(其中int64\u t是长的)不相同?无论您是将其放在右手侧还是左手侧;=运算符是完全对称的 如果=运算符的两个操作数都具有算术类型,如本例所示,则应用“常用算术转换”(C99§6.5.9)。在这种情况下,适用的规则是: 如果两个操作数都具有有符号整数

将大于
int
的类型与整数常量进行比较时,是否应将常量放在左侧或右侧,以确保执行正确的比较

int64_t i = some_val;
if (i == -1)
或者应该是:

if (-1 == i)

在任何情况下,这两种情况是否与比较
-1LL
(其中
int64\u t
长的
)不相同?

无论您是将其放在右手侧还是左手侧;
=
运算符是完全对称的

如果
=
运算符的两个操作数都具有算术类型,如本例所示,则应用“常用算术转换”(C99§6.5.9)。在这种情况下,适用的规则是:

如果两个操作数都具有有符号整数类型或都具有无符号整数类型 整数类型,则类型为较小整数转换秩的操作数为 已转换为具有更高秩的操作数类型。(C99§6.3.1.8)


因此,-1被转换为
int64\t
-1LL
没有什么区别。

太棒了,这正是我想知道的。除了回答:把常量放在第一位的通常原因是为了帮助捕捉打字错误:如果你把
==
误输入为
=
,那么编译器会抱怨你不能指定一个常量。另一方面(右边的常量),编译器的抱怨是不能保证的