在为Arduino这样的微系统编程时,我只是一个普通的C用户,但我对提高对当地语言的理解很感兴趣。
我知道你可以速记像x = x % 10到x %= 10,x = x + 1到x += 1这样的东西。但我不能把这两者结合在一起:
x = (x + 1) % 10
如果有可能的话,它是什么样子的?(x += 1) %= 10?那似乎..。如果没有错,那就让人困惑。
发布于 2019-03-17 02:41:54
表达式(x += 1) %= 10在C中是不合法的。赋值运算符的结果,无论是=还是复合赋值运算符,都不是lvalue。松散地说,这意味着它不能出现在作业的左边。
这一声明必须分为两部分:
x += 1;
x %= 10;顺便说一下,(x += 1) %= 10在C++中是有效的。
发布于 2019-03-20 07:10:32
只需尝试x += 1; x %= 10;作为替代,它将工作,但它并不等同于第一个表达式。不能在单个expression1中将两者都包装为
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;
https://stackoverflow.com/questions/55203364
复制相似问题