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=9c=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)。