双后增量的结果 - 在 if 语句及其主体中

Result of double postincrementation - in if statement and its body

有人能解释一下为什么这一行短代码返回 1 吗?

int i = 0;
if(i++) i++;
printf("%d", i);

我的意思是当检查 if 语句时 i 必须递增,否则结果不会是 1。但是当它递增时应该再次递增,导致 2.

更好的是,为什么这行代码的结果是 2?

int i = 0;
if(++i || i++) i++;

还有这个

int i = 0;
if(++i && i++) i++;

Returns 3.

  • 代码行 if(i++) 在递增之前检查 i 的值。因此检查失败,因为 i=0 并且在检查之后,i 将在离开 if 条件使其等于 1 之前递增。
  • 但是 if(++i || i++) 通过了,因为 ++i 在检查条件之前被评估,条件被评估为 1,条件将为真,然后 i++ 将导致 2。
  • 此外,由于 ++i 将为 1,而 i++ 也仍为 1,因为 i 将在其递增之前首先使用。所以 1 && 1 为真,然后在离开条件之前,i 将递增到 2 并且 if 下面的行将被评估为 3 并且 i 的新值将为 3.