为什么代码 "x++ && y++;" 在没有控制运算符的情况下可以在 C 中运行?
Why does the code "x++ && y++;" work in C without a control operator?
我正在寻找减少线路使用的方法并遇到了这个并且它似乎工作正常。我在网上找不到任何关于它的信息,有人能解释一下这是怎么回事吗?假设它甚至 运行,我仍然希望 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' 来切断我程序中的一行,不知道为什么 ^^ 对我有用!感谢大家的回复!
逻辑运算符&&
和||
使用short-circuit evaluation。
对于左侧,总是 计算。对于 &&
,如果左侧是 "true",则右侧也会被求值。对于 ||
则相反,如果左侧是 "false" 则评估右侧。
并且在 C 中任何非零的都是 "true"。只有零是 "false".
每个功能规则 25 行的 精神 确实是为了可扩展性和清晰度;您应该通过将一个长函数分解为单独的组件函数来努力遵守它,而不是试图通过您在问题中引用的此类设计 golf 您的代码。
对于表达式x++ && y++
,y++
仅在x++
为非零时才计算,注意x++
计算为[=15的初始值=].
请注意,您可以将程序缩减为
#include <stdio.h>
int main()
{
for (int x = 4, y = 7; x++ && y++, printf("%d\n%d", x, y); ) break;
}
你还剩 24 行,这很好!?请注意,编译器需要在函数 main
.
的情况下插入隐式 return 0;
我正在寻找减少线路使用的方法并遇到了这个并且它似乎工作正常。我在网上找不到任何关于它的信息,有人能解释一下这是怎么回事吗?假设它甚至 运行,我仍然希望 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' 来切断我程序中的一行,不知道为什么 ^^ 对我有用!感谢大家的回复!
逻辑运算符&&
和||
使用short-circuit evaluation。
对于左侧,总是 计算。对于 &&
,如果左侧是 "true",则右侧也会被求值。对于 ||
则相反,如果左侧是 "false" 则评估右侧。
并且在 C 中任何非零的都是 "true"。只有零是 "false".
每个功能规则 25 行的 精神 确实是为了可扩展性和清晰度;您应该通过将一个长函数分解为单独的组件函数来努力遵守它,而不是试图通过您在问题中引用的此类设计 golf 您的代码。
对于表达式x++ && y++
,y++
仅在x++
为非零时才计算,注意x++
计算为[=15的初始值=].
请注意,您可以将程序缩减为
#include <stdio.h>
int main()
{
for (int x = 4, y = 7; x++ && y++, printf("%d\n%d", x, y); ) break;
}
你还剩 24 行,这很好!?请注意,编译器需要在函数 main
.
return 0;