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

条件编译的概念

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

一、基本用法

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

2> 如果条件1不成立、条件2成立,那么编译器就会把#elif#else之间的code2代码编译进去

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

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

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

二、举个例子

在第3行定义了一个宏MAX,当然在开发中这个MAX可能被定义在其他头文件中,现在只是为了方便演示,就写到main函数上面了。注意第7到第13行的条件编译语句。

由于MAX为11,所以#elif的条件成立,第10行代码将会被编译进去,其实编译预处理后的代码是这样的:

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

三、其他用法

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

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

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

条件也可以取反:

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

2.#ifdef和#ifndef的使用

#ifdef的使用和#if defined()的用法基本一致

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

#ifndef又和#if !defined()的用法基本一致

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

你想学习更多知识,成为一名优秀的C/C++程序员吗?如果你感兴趣或者有需求的话,笔者强烈推荐一个编程技术学习交流聚集地→="https://jq.qq.com/?_wv=1027&k=52pHMQf">C语言/C++编程技术学习交流俱乐部!小白和大神们正在等着你一起探讨编程,氛围超好!

条件编译宏定义_C语言学习- 预处理指令2 - 条件编译相关推荐

  1. .net 宏定义_C语言、嵌入式中一些实用的宏技巧

    宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段.但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印. 特别是对于异常情况的打印,我们需要快速 ...

  2. c语言解除宏定义_C语言宏定义 define,及一些陷阱!

    https://m.toutiaocdn.com/group/6584292311289561607/?iid=39362926900&app=news_article&timesta ...

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

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

  4. .net 宏定义_C语言基础知识:几种特殊的函数宏封装方式

    函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销. 函数宏本质上为宏,可以直接进行定义,例如: #define INT ...

  5. c语言宏定义_C语言宏定义

    C语言的宏,是C的一大特点,宏定义可以用来定义常量,函数,为了全局替换起来方便. 比如: #define PIE 3.1415926 再比如: #define MAX(a,b) ( (a)>(b ...

  6. abs int 宏定义_C语言之函数与宏定义。

    需要注意的几点: 1. 储存类型符指的是函数的作用范围,它有两种形式:static和extern.static说明的函数只能作用于其所在的源文件,它又称为是内部函数:extern说明函数可以被其他源文 ...

  7. c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt

    编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...

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

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

  9. mysql宏参数_C语言带参数的宏定义

    C语言允许宏带有参数.在宏定义中的参数称为"形式参数",在宏调用中的参数称为"实际参数",这点和函数有些类似. 对带参数的宏,在展开过程中不仅要进行字符串替换, ...

最新文章

  1. linux文件 i节点结构,Linux 文件描述符 文件表项 i节点结构
  2. 嵌入式linux hdmi分辨率,【Firefly3399Pro】rk3399pro在Framebuffer状态命令行模式中强制HDMI输出固定分辨率...
  3. 解读ADC采样芯片(EV10AQ190A)的采样(工作)模式(双通道模式)
  4. 怎么查电脑系统版本_电脑系统垃圾清理利器,专业、小巧且免费,有这一个就够了...
  5. 京东数科宣布机房巡检AI机器人落地金融机构数据中心
  6. layui动态生成的下拉框被遮住
  7. 15 CO配置-控制-内部订单-维护分配结构
  8. Android开发笔记(一百六十五)利用红外发射遥控电器
  9. Observable与Observer
  10. 测试文档模板_学会word2007创建自定义模板的方法,让你新建的文档结构都一致...
  11. 坚持开源、能力内化,中移苏研荣获“中国开源领军企业”大奖!
  12. 数学模型学习——图与网络
  13. 微信签到积分换卷小程序(完整前后台)
  14. USB通信协议与供电协议全解
  15. 基于SpringBoot + Vue的个人博客系统16——文章的修改和删除
  16. [Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]
  17. JAVA Stream的collect用法与原理(详解)
  18. Gitlab: 常用设置
  19. python爬取英雄联盟所有皮肤价格表_利用Python协程来爬取LOL所有英雄的皮肤高清图片...
  20. MCE | HIV 衣壳蛋白有望成为 HIV 治疗新靶标

热门文章

  1. 最大乘积java_《算法入门经典》-最大乘积(java实现)
  2. vue 高德轨迹自定义两点之间的颜色_vue 还是 react?这是一个问题
  3. jsp java代码取session_jsp中的session在java文件中取到
  4. java编译遇到的问题与解决_java web开发中遇到的问题及解决方案(个人学习日志,持续更新)...
  5. 线段树模板1(例题BZOJ1012)单点修改+区间查询
  6. Android 实现卫星菜单
  7. 基于局部敏感哈希的协同过滤算法之simHash算法
  8. Java面向对象 网络编程 上
  9. CodeForces - 798B Mike and strings
  10. Bailian4018 子串【字符串】