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

2、现在再来说说2楼提到的自动变量局部化的问题:

通过google,得知:

#if 0code
#endif 

(1)code中定义的是一些调试版本的代码,此时code完全被编译器忽略。如果想让code生效,只需把#if 0改成#if 1 
(2)#if 0还有一个重要的用途就是用来当成注释,如果你想要注释的程序很长,这个时候#if 0是最好的,保证不会犯错误。(但是林锐的书上说千万不要把#if 0 来当作块注释使用) 
#if 1可以让其间的变量成为局部变量。 
(3)这个结构表示你先前写好的code,现在用不上了,又不想删除,就用这个方法,比注释方便。 
------------------------------------------------

“#if 0/#if 1 ... #endif”的作用相关推荐

  1. 23.C语言中#if 0,#if 1,#else,#endif的作用

    在调试中经常遇到,写好的程序,需要调试多种情况,但是,我们同一时间只是想看到一种情况,如:         有两款单片机的程序,分别对应着不同的硬件引脚,我们把代码都写上了,但是不想让他们同时起效,通 ...

  2. 每日一题(12)—— .h头文件中ifndef/define/endif的作用

     .h头文件中ifndef/define/endif的作用? 分析: 防止头文件被重复包含. #ifndef _TEST_H_ #define _TEST_H_/* test.h */#endif / ...

  3. #ifndef #define #endif的作用

    #ifndef #define #endif的作用 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件.当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误. 在头文件中实用#ifn ...

  4. c语言中endif的作用,C语言中#ifdef,#ifndef和#endif的作用

    现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中.否则如果出现有定义,比如头文件中有int a =2;如果有多个 ...

  5. 0欧姆电阻简介及作用

    0欧姆电阻简介及作用 一.0欧姆电阻简介 1.电阻标准文件中指出0欧姆电阻可以允许多种偏差,分别是10mΩ,20mΩ,50mΩ.罗姆,国巨,光颉的规格书中0Ω的最大最值都是50Ω. 2.根据罗姆,国巨 ...

  6. Vue3.0 setup的使用及作用

    目录 开篇: 1.什么是setup 2.setup怎么使用 3.setup中包含的生命周期函数 3.setup相关参数 4.setup特性总结 总结 开篇: 从vue2升级 vue3,vue3是可以兼 ...

  7. 0 零 欧姆电阻的作用

      0 零 欧姆电阻的作用 1,在电路中没有任何功能,只是在PCB上为了调试方便或兼容设计等原因. 2,可以做跳线用,如果某段线路不用,直接不贴该电阻即可(不影响外观) 3,在匹配电路参数不确定的时候 ...

  8. # ; @REM !等符号在WINCE6.0下的意义和作用

    其实在我的日志里面很早就有介绍这里面一些符号的意义了,具体可以看我的第二篇日志< .bat 配置文件的一些符号所代表的意思?>.只是当时学的不是很扎实,今天师妹请教,于是整理一篇日志,方便 ...

  9. xml文档的「?xml version=“1.0“ encoding=“UTF-8“?」 的作用?

    <?xml version="1.0" encoding="UTF-8"?> 的作用? version="1.0" 声明用的xm ...

  10. #ifndef, #define, #endif的作用

    目录 作用 示例 作用 #ifndef 它是if not define 的简写,是宏定义的一种,实际上确切的说,这应该是预处理功能三种(宏定义.文件包含.条件编译)中的一种--条件编译. 在c语言中, ...

最新文章

  1. 01 Python基础学习
  2. 深度学习之四:常用模型和方法
  3. mysql数据库密码转换_MySQL数据库root账户密码忘记两种处理方法转载
  4. Ble Connection Events(转载)
  5. css中的一些常用选择器
  6. Hadoop手动升级HA配置手册
  7. NSMapTable
  8. axios异步请求数据的简单使用
  9. 杨强教授团队权威专著《联邦学习》问世,展现数据孤岛和数据保护难题破解之法
  10. 高光谱图像pca降维matlab_基于 SAE-LR 的高光谱分类
  11. 水滴互助 :网络互助「创新者窘境」如何打破?
  12. 计算机单片机毕设答辩问题,单片机毕业论文答辩常见问题.docx
  13. Protel99SE 50个常见问题解决方法与技巧
  14. 暗黑破坏神2 符文自动合成--按键精灵源码
  15. 节目源php代理_【斗鱼直播源】浏览器抓取真实直播源地址(纯前端JS PHP解析源码)...
  16. 5分钟快速安装ASP.NET Core 网站运行环境
  17. WebView加载网页不显示图片解决办法
  18. finereport 激活码
  19. html恶搞之无限弹窗
  20. C# Settings.settings的用处

热门文章

  1. imu传感器工作原理_各种传感器工作原理汇总
  2. eureka原理_SpringCloud学习之—Eureka集群搭建
  3. 物联网学什么编程语言_物联网要学什么
  4. mac 二进制安装mysql_教程方法;在mac下安装mysql二进制分发版的方法(不是dmg的)电脑技巧-琪琪词资源网...
  5. cat和EOF的组合妙用
  6. Confluence 6 LDAP 用户结构设置
  7. ValueError: output parameter for reduction operation logical_and has too many dimensions ?
  8. 在Application中集成Microsoft Translator服务之使用http获取服务
  9. C# WinForm 为 RichTextBox 添加行号小技巧
  10. Linux学习之路(2-1)文件、目录与磁盘格式