组合复合运算符

Combining compound operators

在为像 Arduino 这样的微型计算机编程时,我只是 C 的临时用户,但我有兴趣提高对白话的理解。

我知道您可以 shorthand 诸如 x = x % 10x %= 10x = x + 1x += 1 之类的东西。但是我无法将这两个部分结合起来:

x = (x + 1) % 10

如果可能的话,它看起来像什么? (x += 1) %= 10 ?好像...如果没有错,那就令人困惑了。

表达式 (x += 1) %= 10 在 C 中不合法。赋值运算符的结果,无论是 = 还是复合赋值运算符之一,都不是左值。笼统地说,这意味着它不能出现在作业的左侧。

该声明必须分为两部分:

x += 1;
x %= 10;

顺便说一句,(x += 1) %= 10 在 C++ 中有效。

只需尝试 x += 1; x %= 10; 作为替代,它会起作用,但它不等同于第一个表达式。您不能将两者都包装在一个表达式 [1] as

x op= expression;

表示

x = x op (expression);  /* look at the parenthesis */

这会强制首先对表达式求值。唯一一个

x = (x op1 a) op2 b;

如果运算符是关联的并且表达式可以转换为:

,则可以转换为运算赋值运算
x = x op1 (a op2 b);

(或者如果op2的优先级高于op1,表示求值顺序同上)然后

x op1= a op2 b;

有可能。

例子

x = x + a + b;  ==>  x += a + b;  /* this implies a different order of evaluation */
x = x + a * b;  ==>  x += a * b;
x = x + a % b;  ==>  x += a % b;  /* % has higher precedence than + */

注意 [1]: 好吧,你可以,但是使用另一个运算符,, 逗号运算符,你可以将它转换为 x += 1, x %= 10;