一道有意思的关于注释嵌套测试的问题
有这么一个问题:如何写一个测试程序,试验出你的编译器是否支持注释嵌套?
在C编译器进行词法分析的时候是采用的贪心算法,对此Kernighan和Ritchie描述如下:" 如果编译器的输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的最长字符串。"
如下例:
/*/**/"*/"
如果允许嵌套注释,上面的符号序列被解释为 /* /**/" */ ",这样最终等效于一个 " 号。
如果不允许嵌套注释,则此序列被解释为 /* /* */ "*/", 则被解释为一个字符串"*/"。
由此可以用这样一种方法判定:
/*/*/0*/**/1
允许嵌套时: /* /* /0 */ * */ 1 序列被解释为1。
不允许嵌套时: /* / */ 0* /**/ 1 序列被解释为0*1 ,也就是 0 。
最终设想出这样一个程序 :
int i;
i = /*/*/0*/**/1;
printf( "%d", i );
输出为1即允许嵌套,为0则不允许嵌套。^_^
附录:ANSI C中是不允许嵌套注释的,C标准的编译器来说是应该严格遵循这一点的,作为程序员也应该认识到这一点,对于潜在的程序移植或者编译器环境的变化时会避免一些不必要的麻烦。