"h = b = out" 这行在 C 中是什么意思

What does the line "h = b = out" mean in C

 h = b = out;

 /* h is the number of code points that have been handled, b is the  */
 /* number of basic code points, and out is the number of ASCII code */
 /* points that have been output.                                    */

我不知道这一行是否只是一种将 hb 都设置为 out 的奇怪方式,或者如果它是一个设置 h 等于 true (0?) 如果 b 已经等于 out.

它将 h 和 b 设置为 out。 布尔值将是 h ? b : out; 并且意味着如果 h 为真则 b 否则为 - 所以它没有为 h

设置任何内容

它不能是布尔值,因为那样会使用 == 而不是 =
所以是的,这是一种设置两个变量的(奇怪的)方式,基于 b=out 的值是 out.

的事实

h = b = 出来; 在 C 中,这意味着设置 h 和 b 都等于 out。 h = ( b = 输出);表示布尔表达式。

=always C 中的赋值运算符,不能用于比较 2 个值。要获得“布尔”表达式,您必须使用 ==。表达式 a = b 将 b 赋给 a 并且 returns 赋值 可以在另一个表达式中使用。所以 h = b = out; 实际上将 out 分配给了 bh。它被解析为 h = (b = out) 因为在 C 中 = 运算符是 left associative

Assignment also returns the same value as what was stored in lhs (so that expressions such as a = b = c are possible). The value category of the assignment operator is non-lvalue (so that expressions such as (a=b)=c are invalid).

https://en.cppreference.com/w/c/language/operator_assignment