#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=9
和c=17
。在a+++b
中,为什么编译器需要a++
然后添加b
。为什么不采用a +
和
++b
?此a+++b
是否有特定名称。请帮我理解。
答案 0 :(得分:31)
我喜欢Expert C Programming的解释:
ANSI标准规定了一种后来被称为的约定 最大咀嚼策略。最大的蒙克说,如果还有更多 对于下一个标记的一种可能性,编译器将更喜欢 咬掉涉及最长字符序列的那个。所以 示例将被解析
c = a++ + b;
答案 1 :(得分:5)
“maximal munch”或“longongest match”是在创建某个构造时应该消耗尽可能多的可用输入的原则。
每个编译器都有一个tokenizer,它是一个将源文件解析为不同标记(关键字,运算符,标识符等)的组件。其中一个tokenizer的规则称为“maximal munch”,它表示tokenizer应该继续读取源文件中的字符,直到再添加一个字符导致当前令牌停止有意义
答案 2 :(得分:-1)
C中的操作顺序规定一元操作优先于二元操作。
如果你想让b先递增,你可以使用+(++ b)。