我一直在寻找减少线路使用的方法,但遇到了这个问题,它似乎很好。我在网上找不到任何信息,有人能解释一下发生了什么吗?假设它会运行,我仍然希望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;
。