当前位置: 首页 > news >正文

#if 1...#endif

1.

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

 

2.

1 #if 0
2 
3    code
4 5 #endif 

(1)code中定义的是一些调试版本的代码,此时code完全被编译器忽略。如果想让code生效,只需把#if 0改成#if 1 

(2)#if 0还有一个重要的用途就是用来当成注释,如果你想要注释的程序很长,这个时候#if 0是最好的,保证不会犯错误。(但是林锐的书上说千万不要把#if 0 来当作块注释使用) #if 1可以让其间的变量成为局部变量。 

(3)这个结构表示你先前写好的code,现在用不上了,又不想删除,就用这个方法,比注释方便。 

                                                            2014.09.23(转)

转载于:https://www.cnblogs.com/Ph-one/p/3989479.html

相关文章:

  • const
  • 关键字volatile
  • 关键字union
  • 周易·系辞
  • 马云牛啊 从骑自行车到坐迈巴赫只用20年
  • max3232
  • USB/232/485/TTL/CMOS(串口通信)⭐⭐⭐
  • 瘋子C语言笔记(指针篇)
  • keil_4/MDK各种数据类型占用的字节数
  • 汽车OBD接口定义
  • CAN/J1850/
  • STM32.BOOT
  • DMA(STM32)
  • STM32.printf
  • STM32各个文件介绍、uCOSII文件介绍
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 11111111
  • css选择器
  • HTTP那些事
  • Vultr 教程目录
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 区块链将重新定义世界
  • 算法之不定期更新(一)(2018-04-12)
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 优化 Vue 项目编译文件大小
  • Android开发者必备:推荐一款助力开发的开源APP
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​ssh免密码登录设置及问题总结
  • #《AI中文版》V3 第 1 章 概述
  • #ifdef 的技巧用法
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计ssm电影分享网站
  • (三十五)大数据实战——Superset可视化平台搭建
  • (循环依赖问题)学习spring的第九天
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net 使用ajax控件后如何调用前端脚本
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET开源项目介绍及资源推荐:数据持久层
  • .pyc文件是什么?
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @Autowired注解的实现原理
  • @ConfigurationProperties注解对数据的自动封装
  • @DataRedisTest测试redis从未如此丝滑
  • @Pointcut 使用
  • [2010-8-30]
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [AIGC] Java 和 Kotlin 的区别
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [bzoj4240] 有趣的家庭菜园