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

时间:2011-08-29 17:06:28

标签: 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;
}

上述程序输出a=9 b=9c=17。在a+++b中,为什么编译器需要a++然后添加b。为什么不采用a +++b?此a+++b是否有特定名称。请帮我理解。

3 个答案:

答案 0 :(得分:31)

我喜欢Expert C Programming的解释:

  

ANSI标准规定了一种后来被称为的约定   最大咀嚼策略。最大的蒙克说,如果还有更多   对于下一个标记的一种可能性,编译器将更喜欢   咬掉涉及最长字符序列的那个。所以   示例将被解析

c = a++ + b;

答案 1 :(得分:5)

阅读Maximum Munch Principle

  
    

“maximal munch”或“longongest match”是在创建某个构造时应该消耗尽可能多的可用输入的原则。

  

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

答案 2 :(得分:-1)

C中的操作顺序规定一元操作优先于二元操作。

如果你想让b先递增,你可以使用+(++ b)。