为什么在后缀增量和合取运算符之后不处理表达式?
Why are expressions not processed after a postfix increment and a conjunction operator?
我遇到了一个问题,这促使我进行了一些研究。我发现一段代码是这样的:
#include <stdio.h>
int main(void)
{
char i = 0;
i++ && puts("Hi!");
printf("%hhd\n", i);
}
只处理增量,输出:
1
如果将后缀增量替换为前缀增量,则不是这种情况,它输出:
Hi!
1
为什么会这样?
如果问题很愚蠢,我深表歉意。
在
i++ && puts("Hi!");
i
在递增之前求值。因为是0
表达式的第二部分不再需要计算,0 && 0
是0
,0 && 1
也是0
.
带有 pre-increment 的相同表达式意味着 i
在计算时将是 1
,在这种情况下,表达式的第二部分很重要,因为 1 && 1
是可能的,但 1 && 0
也是可能的,这些将呈现不同的结果。
我遇到了一个问题,这促使我进行了一些研究。我发现一段代码是这样的:
#include <stdio.h>
int main(void)
{
char i = 0;
i++ && puts("Hi!");
printf("%hhd\n", i);
}
只处理增量,输出:
1
如果将后缀增量替换为前缀增量,则不是这种情况,它输出:
Hi!
1
为什么会这样?
如果问题很愚蠢,我深表歉意。
在
i++ && puts("Hi!");
i
在递增之前求值。因为是0
表达式的第二部分不再需要计算,0 && 0
是0
,0 && 1
也是0
.
带有 pre-increment 的相同表达式意味着 i
在计算时将是 1
,在这种情况下,表达式的第二部分很重要,因为 1 && 1
是可能的,但 1 && 0
也是可能的,这些将呈现不同的结果。