说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略

上一篇已经介绍了预处理指令中的宏定义,这篇就介绍一下条件编译

条件编译的概念
在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。

一、基本用法

#if 条件1...code1...
#elif 条件2...code2...
#else...code3...
#endif

1> 如果条件1成立,那么编译器就会把#if 与 #elif之间的code1代码编译进去(注意:是编译进去,不是执行,很平时用的if-else是不一样的)
2> 如果条件1不成立、条件2成立,那么编译器就会把#elif 与 #else之间的code2代码编译进去

3> 如果条件1、2都不成立,那么编译器就会把#else 与 #endif之间的code3编译进去

4> 注意,条件编译结束后,要在最后面加一个#endif,不然后果很严重(自己思考一下后果)

5> #if 和 #elif后面的条件一般是判断宏定义而不是判断变量,因为条件编译是在编译之前做的判断,宏定义也是编译之前定义的,而变量是在运行时才产生的、才有使用的意义

二、举个例子

#include <stdio.h>#define MAX 11int main ()
{#if MAX == 0printf("MAX是0");
#elif MAX > 0printf("MAX大于0");
#elseprintf("MAX小于0");
#endifreturn 0;
}

在第3行定义了一个宏MAX,当然在开发中这个MAX可能被定义在其他头文件中,现在只是为了方便演示,就写到main函数上面了。注意第7到第13行的条件编译语句。
由于MAX为11,所以#elif的条件成立,第10行代码将会被编译进去,其实编译预处理后的代码是这样的:

/*stdio.h文件中的内容将会代替#include <stdio.h>的位置*/int main ()
{printf("MAX大于0");return 0;
}

代码变得非常简洁,输出结果:

三、其他用法

1.#if defined()#if !defined()的用法

#if 和 #elif后面的条件不仅仅可以用来判断宏的值,还可以判断是否定义过某个宏。比如:

 #if defined(MAX)...code...#endif

如果前面已经定义过MAX这个宏,就将code编译进去。它不会管MAX的值是多少,只要定义过MAX,条件就成立。

条件也可以取反:

 #if !defined(MAX)...code...#endif

如果前面没有定义过MAX这个宏,就将code编译进去。

2.#ifdef和#ifndef的使用

  • #ifdef的使用和#if defined()的用法基本一致
 #ifdef MAX...code...#endif

如果前面已经定义过MAX这个宏,就将code编译进去。

  • #ifndef又和#if !defined()的用法基本一致
 #ifndef MAX...code...#endif

如果前面没有定义过MAX这个宏,就将code编译进去。

【C语言】16-预处理指令2-条件编译相关推荐

  1. 条件编译宏定义_C语言学习- 预处理指令2 - 条件编译

    上一篇已经介绍了预处理指令中的宏定义,这篇就介绍一下条件编译! 条件编译的概念 在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执 ...

  2. 学习笔记15-C语言-预处理指令、条件编译、头文件

    预处理指令: 程序猿编写的代码不是标准C代码,并不能被真正的编译器索编译,需要一段程序把代码翻译一下. 翻译的过程叫做预处理,被翻译的代码叫做预处理指令,以#开头的都是预处理指令查看预处理的过程:gc ...

  3. c语言中预处理指令的作用,C语言中常用预处理指令

    转载自 https://blog.csdn.net/farsight2009/article/details/58602886 姓名:张艳博 学号:17021223249 [嵌牛导读]: C语言中常用 ...

  4. c语言编译预处理指令大全,C语言预处理指令

    「今天是学习C语言第 32 天」 当你选择了一种语言,意味着你还选择了一组技术.一个社区.--Joshua Bloch # 预处理 C语言源程序先经过预处理器进行预处理,之后经过编译器编译成二进制可执 ...

  5. 黑马程序员——C语言学习——预处理指令、extern与static、typedef、递归

    --------Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------- 一. 预处理指令 顾名思义,预处理,就是预先处理的指令,在代码编译之前执行.预处理指令的位 ...

  6. c语言 条件编译注释,c语言的预处理/条件编译,最全整理看这里

    ​语言的编译过程中第一步进行的就是预编译了,预编译中就是执行#开头的语句,这些处理就是本篇总结的知识点,预处理和条件编译. 通俗的讲预处理就是编译器自动的帮我们上去整理一遍代码,它依据的规则(我们交代 ...

  7. 【C语言】预处理详解

    目    录 1 预定义符号 2 #define 2.1 #define定义标识符 2.2 #define定义宏 2.3 #define替换规则 2.4 #和## 2.5 带副作用的宏参数 2.6 宏 ...

  8. 【C语言】07-预处理指令;-宏定义

    预处理指令简介; 1,C在对源程序进行编译之前,会对一些特殊的预处理指令作解释,产生一个新的源程序,此过程叫做编译预处理.C在经过编译预处理之后才对新的源码进行通常的编译; 2,预处理以'#'开头,且 ...

  9. ios c语言头文件,iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源 ...

  10. C语言预处理命令(预处理指令)

    C语言预处理命令分为:宏定义.文件包含.条件编译 什么是预处理命令? 预处理命令属于C语言编译器,而不是C语言的组成部分 预处理命令的作用:就是在编译和链接之前,对源文件进行一些文本方面的操作,比如文 ...

最新文章

  1. 今日头条后端Java社招面经分享
  2. poj3268(最短路)
  3. mysql having实例_Mysql必读mysql group by having 实例代码
  4. ios动态获取UILabel的高度和宽度
  5. surefire 拉起 junit 单元测试类 源码阅读(一)
  6. ArrayAndString(数组和字符串)
  7. html搞笑注释,9个最有趣的代码注释
  8. linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效...
  9. mybatis框架增删改的注意事项 ,不同数据库取消转义的方法
  10. 运用计算机怎么实现自动化,如何用计算机串口实现自动化控制
  11. 【android错误】bitmap size exceeds 32bits
  12. 吉他效果器amplitube 4 mac 完整破解版永久激活方法
  13. 电脑键盘快捷键使用大全
  14. 计算机系统是几位怎么看,Win10系统如何查看系统位数是32位还是64位
  15. 大学计算机372=多少Q,计算机网络Q0831
  16. 色彩RGBA值写作代码
  17. sequence_loss_by_example()函数在Tensorflow2.x找不到
  18. 区间dp——合并金币
  19. 简历上面的项目经历怎么写?怎么写才能显得突出?
  20. foxmail收发yahoo邮箱

热门文章

  1. iOS code collection
  2. Total Commander工具栏图标 备份
  3. android mp3文件图片,android 完美获取音乐文件中的专辑图片并显示
  4. Luogu2024[NOI2001] 食物链
  5. 电商项目的app学习笔记(二)---创建登陆界面
  6. js高级学习笔记(b站尚硅谷)-12-执行上下文
  7. lisp函数大全 微盘_LISP函数大全
  8. jq怎么赋值给变量_jq: 工具方法
  9. tomcat .appcache html5离线缓存,html5 application cache遇到的严重问题
  10. html标签%3cli%3e分成两列,使用html自制玫瑰