测试编译器是否支持嵌套注释的程序

发布于:2022-12-23 ⋅ 阅读:(381) ⋅ 点赞:(0)

目录

第一种

1.后面跟一对引号引起的注释符。

2.如果支持嵌套注释,只剩一个引号,编译会报错,所以还需要优化。

3.此时可以得出结论,如果支持嵌套注释,则结果为背景蓝色部分。

第二种 

1.如果支持嵌套注释,则上式会被解释为:

2.如果不支持,则被解释为:


第一种

1.后面跟一对引号引起的注释符。

如果支持嵌套,则注释掉背景为蓝色部分,只剩最右边的引号。

 

         如果不支持嵌套,则结果为背景蓝色部分 "*/"

2.如果支持嵌套注释,只剩一个引号,编译会报错,所以还需要优化。

后面再加一个注释符,如果支持嵌套注释,则结果为背景蓝色部分 “/*”。

 

         如果不支持,则结果为背景蓝色部分 “*/”

 

         后面再加一对注释符,防止编译报错。

 

3.此时可以得出结论,如果支持嵌套注释,则结果为背景蓝色部分。

 

        如果不支持嵌套注释,则结果为背景蓝色部分。

第二种 

        利用编译器词法分析时的“贪心法”。

C语言中的符号分单字符符号多字符符号,多字符符号比如:/*,==,以及一些三字母词

此时编译器就需要从左到右一个一个字符的读入,来判断这些字符是否是一个符号的组成。

 

1.如果支持嵌套注释,则上式会被解释为:

/* /* / 0 */ * */ 1;

上图蓝色部分与第一个注释符结合, 此时结果为1。

(此时报错是因为不支持嵌套注释,蓝色部分与第一个注释结合,使得最后一个注释符没有与它匹配的)

        编译器进行词法分析,被空格分开的字符被当成一个符号,此时将上图蓝色部分分开,则被解释为一个一个的符号,直到最后一个注释与第一个注释结合。

        将上图蓝色部分分开,编译器就找不到与第一个注释符配对的注释符,也会报错。

 

 

2.如果不支持,则被解释为:

/* / */ 0* /* */ 1;

 此时式子变为 0*1,结果为0。 

 


网站公告

今日签到

点亮在社区的每一天
去签到