为什么在后缀增量和合取运算符之后不处理表达式?

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 && 000 && 1也是0.

带有 pre-increment 的相同表达式意味着 i 在计算时将是 1,在这种情况下,表达式的第二部分很重要,因为 1 && 1 是可能的,但 1 && 0 也是可能的,这些将呈现不同的结果。