为什么代码“ x ++ && y ++;”没有控制运算符就可以在C中工作?

时间:2018-10-28 15:54:29

标签: c math operators logical-operators

我一直在寻找减少生产线使用量的方法,并且遇到了这种情况,看来效果很好。我在网上找不到任何信息,有人可以解释发生了什么吗?假设它甚至可以运行,我仍然希望x ++的评估结果为false,因此y的价值不会增加。但是确实如此!

#include <stdio.h>

int     main(void)
{
    int     x;
    int     y;

    x = 4;
    y = 7;
    x++ && y++;
    printf("%d\n%d", x, y);
    return (0);
}
>> 5 
   8

编辑:我的项目每个函数的功能限制为25行,这就是为什么我必须减少几行的原因。

编辑2:我所有的代码都经过严格的语法和格式检查器检查,该检查器禁止使用“ x ++,y ++;”。以及其他任何多行语句,所以我只是在寻找一个“ hack”来从程序中删掉一行,并且不知道为什么^^对我有用!感谢所有答复!

2 个答案:

答案 0 :(得分:2)

逻辑运算符&&||使用short-circuit evaluation

对于两个左侧,总是进行 评估。对于&&,如果左侧为“ true”,则还将评估右侧。对于||则相反,如果左侧为“ false”,则将评估右侧。

在C语言中,非零值均为“ true”。只有零是“假”。

答案 1 :(得分:1)

每个功能规则中25行的 spirit 确实可以实现可伸缩性和清晰度。您应该通过将一个长函数分解为单独的组件函数来努力使其符合标准,而不是通过您在问题中引用的某些方式尝试 golf

使用表达式x++ && y++,仅在y++非零的情况下才对x++求值,并且请注意x++的求值为x的初始值

请注意,您可以将程序缩减为

#include <stdio.h>
int main()
{
     for (int x = 4, y = 7; x++ && y++, printf("%d\n%d", x, y); ) break;
}

这很好,因为您还剩24行!请注意,对于函数return 0;,要求编译器插入隐式main