搜索
bottom↓
回复: 14

“#if 0/#if 1 ... #endif”的作用

[复制链接]

出0入0汤圆

发表于 2013-4-8 20:43:19 | 显示全部楼层 |阅读模式
本帖最后由 zl_123 于 2013-4-8 20:44 编辑

今看到一帖子,讨论“#if 0/#if 1 ... #endif”的作用,感觉不错,故拿来分享。
原帖地址:http://www.ourdev.cn/bbs/bbs_con ... 005&bbs_id=9999

1、先说“#if 0/#if 1 ... #endif”的作用,楼上诸位或多或少都说到了一点,但都没有说到关键的地方。我们知道,C标准不提供C++里的“//”这样的单行风格注释而只提供“”这样的块注释功能,我们通常使用它写代码中说明性的注释文字(注释作用)以及在调试时关闭某段代码对编译器的可见性(屏蔽作用),当然,这里所谓的“注释作用”和“屏蔽作用”是我们从功能上下的主观定义,对预处理器而言,两者并无任何区别。对于前者,因为“注释”中不会再出现“注释”和“需要屏蔽的代码段”,所以不会有嵌套的需求,所以通常不会有问题;而对于后者,当我们在调试程序时需要“屏蔽”某段代码时,该段代码中可能包含着前述的“注释”和/或“已被屏蔽的代码段”,这时就产生了“”嵌套使用的需求,但SB的C标准恰恰不允许我们这么干。当你试图使用嵌套的块注释功能时,会发现预处理器把最外层注释的开始和最内层注释的结尾这两者之间的内容处理成了注释,而其后一直到最外层注释结尾的内容被当作了“有效代码”——这显然会引起若干语法错误而导致编译中止。高手们开动脑筋想到了“#if 0 ... #endif”,它同样由预处理器进行处理,同样可以“屏蔽”一段代码,你想把说明文字写在里面也可以,这些和“”都一样,但不一样的是:第一它允许嵌套(层数上限由预处理器决定)、第二你随时可以把“#if 0”改成“#if 1”来取消对某段代码的“屏蔽”——很卓越的特性,快抛弃笨拙的“”吧!它唯一的缺点就是在编辑器中没有“注释”该有的文本显示样式。
(个人简单说明:
利用                     #if 0
                            #endif
可以屏蔽代码段,常用于嵌套注释;
若要恢复程序段,把0改成1即可,因此也方便了调试)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-4-9 07:26:35 | 显示全部楼层
好方法,之前没接触过,学习了!

出0入0汤圆

发表于 2013-4-9 07:33:12 | 显示全部楼层
顶。见过这样的用法。但自己没想到可以这样用。

出0入0汤圆

发表于 2013-4-9 10:33:40 | 显示全部楼层
//下面这行是"//*"则不屏蔽代码;去掉一个斜杠改为“/*”则把代码注释掉:
//*
fun1()
{
}
fun2()
{
}
//*/

出0入0汤圆

发表于 2013-4-9 10:35:17 | 显示全部楼层
实际上,注释比#if 0友好很多……因为一般编辑器都有语法高亮功能,注释掉就变成其他颜色了;而#if 0不会变颜色,导致阅读代码比较困难

出0入0汤圆

发表于 2013-4-9 10:41:44 | 显示全部楼层
本帖最后由 monkerman 于 2013-4-9 10:52 编辑

在 Eclipse/CCS 下, #if  0 是会变色的. 整块都灰色了.
其他的编辑器也有这功能. 如 Vim, Source  insight.   
有时候这么用.
  1. #define   DEBUG     1/0
  2. #if   DEBUG
  3. .......
  4. .......
  5. #endif
复制代码

出0入0汤圆

发表于 2013-4-9 10:44:36 | 显示全部楼层
这个方法不是很普遍么...一直都是这么屏蔽的...

出0入0汤圆

发表于 2013-4-9 10:46:24 | 显示全部楼层
调试的时候经常是
#if DEBUG
....
#else
...
#endif

DEBUG为1测试第一部分,反之第二部分

出0入21汤圆

发表于 2013-4-9 10:52:27 | 显示全部楼层
有经常这么用,但维一不爽的就是代码颜色不会变很不方便。

出0入0汤圆

发表于 2013-4-9 11:27:54 | 显示全部楼层
表示source insight会变色

出0入0汤圆

发表于 2013-4-9 11:48:34 | 显示全部楼层
过去看了下“原帖”才发现,原来LZ位的文字是原样引用的我的话呀,哈哈!



不过当时的一些说法,比如这样的块注释在IDE中没有语法着色的问题,都已经过时了。

出0入0汤圆

发表于 2013-4-26 20:30:56 | 显示全部楼层
学习了,以前没接触过这样的···小鸟

出0入0汤圆

发表于 2013-4-26 22:16:29 | 显示全部楼层
变色问题,用#if 0 这样,编译器应该会变色的吧,编辑器可能不变色

出0入0汤圆

发表于 2013-4-26 22:49:47 来自手机 | 显示全部楼层
表示vim会变色。
应该不是很RZ的编辑器都会。

出70入0汤圆

发表于 2013-4-27 11:17:38 | 显示全部楼层
大段代码用过这种方法,小段代码还是用注释,习惯而已,不一定科学。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表