原理

在C语言中,有很多符号(/、*、=)只有一个字符长,被称为单字符符号。而在C语言中会有诸如== /*包含了多个字符的多字符符号。当C编辑器在读入了一个字符 ' / '之后又跟了一个' * ',那么编辑器就会做出判断:是将其作为两个符号分别对待,还是合起来作为一个符号对待。

C语言对或者问题的解决方案可以归纳为一个很简单的规则:每一个符号都应该包含尽可能多的字符。

也就是说,编译器将程序分解成符号的方法是:将字符一个一个的读进去,如果该字符可能组成一个符号,那么再读入下一个字符。接着编译器会判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,那么就继续读入 ,重复上面的判断,直到读入的字符和前面的组合起来不可能是一个有意义的符号。

这种处理方法叫做"贪心法"。

如果(编译器的)输入流截止至某个字符之前都已经被分解成一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的字符串。

但是我们需要注意的是,除了字符串和字符常量,符号的中间不能有空白(空格符,制表符,换行符)。

举例

有如下表达式:a --- b

它应该与a -- - b含义相同,而与a- --b含义不同。

同样的,考虑下面表达式:y = x/*p,可能我们想要的操作是用x除以指针p所指向的值,但是对于编译器来说,它会理所当然的认为/*是一段注释的开始,所以我们就需要将这语句改写成y = x / *p或者是y = x / (*p)