C中两个变量(如+++ b)之间的3个加号

Ang*_*gus 12 c syntax

#include <stdio.h>

int main()
{
    int a=8,b=9,c;
    c=a+++b;
    printf("%d%d%d\n",a,b,c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的程序输出a=9 b=9c=17.在a+++b为什么编译器会a++,然后用增加b.为什么不考虑a +++b?是否有特定的名称a+++b.请帮我理解.

cni*_*tar 32

我喜欢Expert C Programming的解释:

ANSI标准规定了一种被称为最大蒙克策略的约定 .Maximal munch表示,如果下一个标记有多种可能性,编译器将更喜欢咬掉涉及最长字符序列的标记.所以这个例子将被解析

c = a++ + b;
Run Code Online (Sandbox Code Playgroud)


Sad*_*que 5

阅读最大蒙克原理

"最大munch"或"最长匹配"是在创建一些构造时应该消耗尽可能多的可用输入的原则.


每个编译器都有一个tokenizer,它是一个将源文件解析为不同标记(关键字,运算符,标识符等)的组件.其中一个tokenizer的规则称为"maximal munch",它表示tokenizer应该继续读取源文件中的字符,直到再添加一个字符导致当前令牌停止有意义