“#if 0/#if 1 ... #endif”

通常使用“/*.......*/”写代码中说明性的注释文字(注释作用)以及在调试时关闭某段代码对编译器的可见性(屏蔽作用),

当然,这里所谓的“注释作用”和“屏蔽作用”是我们从功能上下的主观定义,对预处理器而言,两者并无任何区别。

对于前者,因为“注释”中不会再出现“注释”和“需要屏蔽的代码段”,所以不会有嵌套的需求,因此通常也不会有问题;

而对于后者,当我们在调试程序时需要“屏蔽”某段代码时,该段代码中可能包含着前述的“注释”和/或“已被屏蔽的代码段”,这时就产生了“/*......*/”嵌套使用的需求,

但SB的C标准恰恰不允许我们这么干。

当你试图使用嵌套的块注释功能时,会发现预处理器把最外层注释的开始和最内层注释的结尾这两者之间的内容处理成了注释,而其后一直到最外层注释结尾的内容被当作了“有效代码”

/*
int  Add(int a,int b)
{
    return a+b;
}
/*这个函数不再使用
int Sum(int a,int b)
{
    return  a+b;
}
*/
int Add2(int a,int b)
{
    return a+b;
}
*/

——这显然会引起若干语法错误而导致编译中止。

高手们开动脑筋想到了“#if 0 ... #endif”,它同样由预处理器进行处理,同样可以“屏蔽”一段代码,你想把说明文字写在里面也可以,这些和“/*........*/”一样。

复制代码
 1 #if (0)
 2 int  Add(int a,int b)
 3 {
 4     return a+b;
 5 }
 6 /*这个函数不再使用
 7 int Sum(int a,int b)
 8 {
 9     return  a+b;
10 }
11 */
12 int Add2(int a,int b)
13 {
14     return a+b;
15 }
16 #endif
复制代码

但不一样的是:第一它允许嵌套(层数上限由预处理器决定)、第二你随时可以把“#if 0”改成“#if 1”来取消对某段代码的“屏蔽”——很卓越的特性,快抛弃笨拙的“”吧!

它唯一的缺点就是在编辑器中没有“注释”该有的文本显示样式。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值