目录
2.如果支持嵌套注释,只剩一个引号,编译会报错,所以还需要优化。
3.此时可以得出结论,如果支持嵌套注释,则结果为背景蓝色部分。
第一种
1.后面跟一对引号引起的注释符。
如果支持嵌套,则注释掉背景为蓝色部分,只剩最右边的引号。
如果不支持嵌套,则结果为背景蓝色部分 "*/"。
2.如果支持嵌套注释,只剩一个引号,编译会报错,所以还需要优化。
后面再加一个注释符,如果支持嵌套注释,则结果为背景蓝色部分 “/*”。
如果不支持,则结果为背景蓝色部分 “*/”。
后面再加一对注释符,防止编译报错。
3.此时可以得出结论,如果支持嵌套注释,则结果为背景蓝色部分。
如果不支持嵌套注释,则结果为背景蓝色部分。
第二种
利用编译器词法分析时的“贪心法”。
C语言中的符号分单字符符号和多字符符号,多字符符号比如:/*,==,以及一些三字母词。
此时编译器就需要从左到右一个一个字符的读入,来判断这些字符是否是一个符号的组成。
1.如果支持嵌套注释,则上式会被解释为:
/* /* / 0 */ * */ 1;
上图蓝色部分与第一个注释符结合, 此时结果为1。
(此时报错是因为不支持嵌套注释,蓝色部分与第一个注释结合,使得最后一个注释符没有与它匹配的)
编译器进行词法分析,被空格分开的字符被当成一个符号,此时将上图蓝色部分分开,则被解释为一个一个的符号,直到最后一个注释与第一个注释结合。
将上图蓝色部分分开,编译器就找不到与第一个注释符配对的注释符,也会报错。
2.如果不支持,则被解释为:
/* / */ 0* /* */ 1;
此时式子变为 0*1,结果为0。