(0 <= x < 100) + (i = j = 0) + (char)(65 + 3)
int x, i, j;
int result = (0 <= x < 100) + (i = j = 0) + (char)(65 + 3);
printf("%d\n", result); //=> 69
//# 第一个部分 0<=x为0或1然后和100比较永远为真因为不管是0还是1都小于100,所以第一部分结果是1
//# 第二部分结果为右值就是0
//# 第三部分虽然是char类型进行+运算的时候会转换成65+3的值就是68
//=>最后1 + 0 + 68 = 69
//printf("%d", (0 <= x)); //=> 1
运算结果是69 并弹了一个警告意为 布尔类型和常量100比较永远为true
void case3()
{
int x = 2, y = -1, z = 2;
if (x < y)
if (y < 0)
z = 0;
else
z += 1;
printf("%d\n", z); //=> 2
//# 第一个判断为false所以不往下走,
//# 而else属于上面的if,第二个if不执行,不会有z=0也不会有+=1
//# 运算的最后z没有任何操作还是2输出
}
警告: 添加显式大括号以避免挂起其他大括号
这种写法不规范开发中要避免