C缺陷与陷阱
最近阅读C缺陷与陷阱,发现很多有意思的地方,在此作为记录.
No 1. 某些编译器允许嵌套注释。请写一个测试程序,要求:无论是对允许嵌套注释的编译器还是对不允许嵌套注释的编译器,改程序都能正常通过编译,但两种情况下程序执行的结果却不相同.
答案:
#include <stdio.h>
int main()
{
int i=/*/*/0*/**/1;
printf("%d\n",i);
}
这个解法主要利用了编译器作词法分析时的“贪心法”规则。如果编译器允许嵌套注释,则上式将被解释为:1
如果不允许嵌套注释,上面的表达式因此将被这样解释:0......