当前位置: 首页 > 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文件介绍
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Django 博客开发教程 8 - 博客文章详情页
  • es的写入过程
  • overflow: hidden IE7无效
  • Spark RDD学习: aggregate函数
  • SpiderData 2019年2月25日 DApp数据排行榜
  • spring cloud gateway 源码解析(4)跨域问题处理
  • 测试如何在敏捷团队中工作?
  • 浮现式设计
  • 观察者模式实现非直接耦合
  • 配置 PM2 实现代码自动发布
  • 收藏好这篇,别再只说“数据劫持”了
  • 我与Jetbrains的这些年
  • 硬币翻转问题,区间操作
  • 中文输入法与React文本输入框的问题与解决方案
  • 交换综合实验一
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • (02)Hive SQL编译成MapReduce任务的过程
  • (4) PIVOT 和 UPIVOT 的使用
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (Oracle)SQL优化技巧(一):分页查询
  • (poj1.2.1)1970(筛选法模拟)
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十) 初识 Docker file
  • ***测试-HTTP方法
  • ***监测系统的构建(chkrootkit )
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net生成的类,跨工程调用显示注释
  • .NET是什么
  • [51nod1610]路径计数
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [BZOJ2850]巧克力王国
  • [BZOJ4566][HAOI2016]找相同字符(SAM)
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]