这其实也是C语言的一个语法:所谓的贪心原则.
也就是最大原则.
比如说
x/*p 这个表达式,C语言会把其中的/*当成注释的开头,(虽然着一般不是想要的结果).如果把它理解成 x / *p这样很符合常理.编译器在读取到/以后,也不知道它是哪个符号,所以它等待下一个字符*,而/*刚好能组成一个有意义的符号,所以就会结合起来.如果在/*之间加一个空格,那么/与空格不能组成有意义的符号,故把它理解成除号.
你的例子我分析一个:a+++++b (如果理解成这样(a++)+(++b)才会有意义,不过编译器决不会这样理解)
首先,是a . 然后读取到一个+,接着再读取一个+,这两个+刚好可以组成++,这样就变成了 a ++ ;
接着再读取一个+,由于没有+++这个符号.这样变成了a ++ +;
接着读取一个+,和前面一个+组合成++,这样变成了a ++ ++;
再读取一个+,同理变成了a ++ ++ +;
读取b.所以最终结果是 a ++ ++ + b.或者是 ( (a++)++ ) + b;这是一个错误的表达式.