(int_1 += *pointer++ = int_2++) < int_3 是什么意思?

2024-03-14

我正在读书这个之前的答案 https://stackoverflow.com/a/14164818/1894277其中有一段我无法理解的C代码。它本质上看起来像这样:

if((int_1 += *pointer++ = int_2++) < int_3) continue;

我可以把它分解成这样——

这是什么意思?我可以讲到这一点:

if((int_1 = int_1+ *pointer++ (unsure about this part))<int_3) continue;

所以对于初学者来说,这是非常非常糟糕的 C 代码。就像可怕的 C 代码一样。就像,我已经用 C 编码很长时间了,不得不拿出一个运算符优先级表 http://en.cppreference.com/w/c/language/operator_precedence因为我从来没有遇到过这么可怕的事情。因此,没有理由编写这样的东西 - 当然不是在生产代码中,并且希望不是作为类的一部分,因为您不应该永远不需要知道运算符优先级的这种特殊怪癖(来源:我以教授 CS 为生)。我什至可以说,您引用的源代码是 Bad C Code That Should Never Be Written That Way。

但话虽如此,让我们把它分解一下!这里的核心表达是

(int_1 += *pointer++ = int_2++) < int_3

该内部表达式中有两个赋值运算符,它们具有相同的优先级并从右到左分组。这意味着这相当于

(int_1 += (*pointer++ = int_2++)) < int_3

这意味着

  1. 增量int_2并存储其旧值。
  2. 将该值存储在由 指向的位置pointer,然后将指针前进到下一个位置。
  3. 将该值添加到int_1.
  4. 然后查看该值是否小于int_3.

没有理由做这样的事情。写吧

int val = int_2;
*pointer = val;
int_1 += val;

int_2++;
pointer++;

if (int_1 < int_3) {
    ...
}

嗯是的!不要写这样的代码。曾经。 :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(int_1 += *pointer++ = int_2++) < int_3 是什么意思? 的相关文章

随机推荐