C中两个变量(如+++ b)之间的3个加符号
#include int main() { int a=8,b=9,c; c=a+++b; printf("%d%d%d\n",a,b,c); return 0; }
上面的程序输出a=9 b=9
和c=17
。 在a+++b
为什么编译器需要a++
然后加上b
。 为什么不采用a +
和++b
? 这个a+++b
是否有特定的名称。 请帮我理解。
我喜欢Expert C Programming的解释:
ANSI标准规定了一种被称为最大咀嚼策略的约定。 Maximal munch表示如果下一个标记有多种可能性,编译器将更喜欢咬掉涉及最长字符序列的标记。 所以这个例子将被解析
c = a++ + b;
阅读最大蒙克原理
“最大munch”或“最长匹配”是在创建一些构造时应该消耗尽可能多的可用输入的原则。
每个编译器都有一个tokenizer,它是一个将源文件解析为不同标记(关键字,运算符,标识符等)的组件。 其中一个tokenizer的规则称为“maximal munch”,它表示tokenizer应该继续读取源文件中的字符,直到再添加一个字符导致当前令牌停止有意义
C中的操作顺序规定一元操作具有比二元操作更高的优先级。
如果您希望首先递增b,可以使用+(++ b)。