我们都知道i++是先引用i,然后对i进行加一,++i是先对i进行加一,然后在使用i;
在下面这个表达式里面,你能计算出来z的值吗?
int z, y = 0, x=10;
z = y+++x; //三个+号之间没有空格
在这里程序员的意图可能是z = y + ++x; 但也可能是z = y++ + x;在ANSI C规定了一种逐渐为人所知的“maximal munch strategy(最大一口策略)”。
这种策略表示如果下一个标记有超过一种的解释方案,编译器将选取能组成最长字符序列的方案。以上这个例子,它将被解析为z = y++ + x;
因此,计算之后z的值为10。
但是,对于z = y+++++x;
按照前面的策略将被解析为z = y++ ++ +x,这将引起一个编译错误,错误信息是“++操作符迷失于空格间”。即使编译器能够推断唯一有效的编排方式是
z = y++ + ++x; 它还是出现编译错误。