为什么代码"x++ && y++;"没有控制运算符的情况下在 C 中工作?



我一直在寻找减少线路使用的方法,但遇到了这个问题,它似乎很好。我在网上找不到任何信息,有人能解释一下发生了什么吗?假设它会运行,我仍然希望x++的值为false,因此y的值不会增加。但确实如此!

#include <stdio.h>
int     main(void)
{
int     x;
int     y;
x = 4;
y = 7;
x++ && y++;
printf("%dn%d", x, y);
return (0);
}
>> 5 
8

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

编辑2:我所有的代码都要经过严格的语法和格式检查,检查程序禁止"x++,y++;"和任何其他多行语句,所以我只是在寻找一个"破解"来从我的程序中删除一行,不知道为什么^^对我有用!感谢所有的回复!

逻辑运算符&&||使用短路评估

对于两者,左侧总是求值。对于&&,如果左侧为"true",则右侧也会进行求值。对于||,情况正好相反,如果左侧为"false",则对右侧进行求值。

在C中,任何非零的都是"真"。只有零是"false"。

每个函数25行规则的spirit确实具有可扩展性和清晰度;你应该努力遵守它,把一个长函数分解成单独的组件函数,而不是像你在问题中提到的那样,试图通过这样的方法来golf你的代码。

对于表达式x++ && y++,仅当x++为非零时才计算y++,并且注意,x++的计算结果为x的初始值。

请注意,您可以将程序简化为

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

这很好,因为你还有24行!?注意,在函数main的情况下,编译器需要插入隐式return 0;

相关内容

  • 没有找到相关文章

最新更新