很多学过其他编程语言的人可能会用到这么个技巧,那就是把一段暂时不需要的程序“注释”掉。我一开始用C语言的时候 ,遇到暂时不用的代码时就是把他们放在/和/之间。
可是当你用C语言的时候就得注意了。
C语言的编译器 ,有的支持注释嵌套 ,有些不支持注释嵌套 。怎么回事呢?
假如有以下一段程序
int program()
{
/*
do_one();
/*
This is an annotation!
*/
do_two();
*/
return 0;
}
如果编译器支持 注释嵌套, 则 程序就成了
int program()
{
return 0;
} 如果不支持注释嵌套, 编译器会认为 注释在 do_two();前面就已经结束了 而把后面的当作语句 。这时就可能出现错误。
那么如果在C语言中想要“注释掉”一大段程序 怎么办呢?
方法如下
#ifdef 0
do_something();
#endif
这样把代码放到 #ifdef 和 #endif 之间。
在《C陷阱与缺陷》一书中还提了一个有意思的问题,如何写出一个程序 让它既能在支持注释嵌套的编译器下运行,也能在不支持注释嵌套的编译器下运行。
下面是几个解: (可以自己先想一下怎么做 再看答案哦)
/*/**/"*/"/*"/**/
这样,如果允许嵌套注释,上面的表达式就等效于"*/";如果不允许,那么就等效于"*/"?
/*/*/0*/**/1?
如果编译器允许嵌套注释,则上式将被解释为:
/* /* /0 */ * */ 1
两个/*符号与两个*/符号正好匹配,所以上市的值就是1。如果不允许嵌套注释,竖直中的/*将被忽略。因此,即使是/出现在注释中也没有特殊的含义;上面的表达式因此将被这样解释:
/* / */ 0* /**/
它的值就是0*1,也就是0
本站采用 知识共享署名-非商业性使用-相同方式共享3.0 中国大陆许可协议 进行许可,转载请注明出处。
推荐使用 chrome 浏览器浏览本站。