条件编译宏定义_C语言学习- 预处理指令2 - 条件编译
上一篇已经介绍了预处理指令中的宏定义,这篇就介绍一下条件编译!
条件编译的概念
在很多情况下,我们希望程序的其中一部分代码只有在满足一定条件时才进行编译,否则不参与编译(只有参与编译的代码最终才能被执行),这就是条件编译。
一、基本用法
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 - 条件编译相关推荐
- .net 宏定义_C语言、嵌入式中一些实用的宏技巧
宏打印函数 在我们的嵌入式开发中,使用printf打印一些信息是一种常用的调试手段.但是,在打印的信息量比较多的时候,就比较难知道哪些信息在哪个函数里进行打印. 特别是对于异常情况的打印,我们需要快速 ...
- c语言解除宏定义_C语言宏定义 define,及一些陷阱!
https://m.toutiaocdn.com/group/6584292311289561607/?iid=39362926900&app=news_article×ta ...
- 黑马程序员——C语言学习——预处理指令、extern与static、typedef、递归
--------Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------- 一. 预处理指令 顾名思义,预处理,就是预先处理的指令,在代码编译之前执行.预处理指令的位 ...
- .net 宏定义_C语言基础知识:几种特殊的函数宏封装方式
函数宏介绍 函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销. 函数宏本质上为宏,可以直接进行定义,例如: #define INT ...
- c语言宏定义_C语言宏定义
C语言的宏,是C的一大特点,宏定义可以用来定义常量,函数,为了全局替换起来方便. 比如: #define PIE 3.1415926 再比如: #define MAX(a,b) ( (a)>(b ...
- abs int 宏定义_C语言之函数与宏定义。
需要注意的几点: 1. 储存类型符指的是函数的作用范围,它有两种形式:static和extern.static说明的函数只能作用于其所在的源文件,它又称为是内部函数:extern说明函数可以被其他源文 ...
- c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt
编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...
- 学习笔记15-C语言-预处理指令、条件编译、头文件
预处理指令: 程序猿编写的代码不是标准C代码,并不能被真正的编译器索编译,需要一段程序把代码翻译一下. 翻译的过程叫做预处理,被翻译的代码叫做预处理指令,以#开头的都是预处理指令查看预处理的过程:gc ...
- mysql宏参数_C语言带参数的宏定义
C语言允许宏带有参数.在宏定义中的参数称为"形式参数",在宏调用中的参数称为"实际参数",这点和函数有些类似. 对带参数的宏,在展开过程中不仅要进行字符串替换, ...
最新文章
- linux文件 i节点结构,Linux 文件描述符 文件表项 i节点结构
- 嵌入式linux hdmi分辨率,【Firefly3399Pro】rk3399pro在Framebuffer状态命令行模式中强制HDMI输出固定分辨率...
- 解读ADC采样芯片(EV10AQ190A)的采样(工作)模式(双通道模式)
- 怎么查电脑系统版本_电脑系统垃圾清理利器,专业、小巧且免费,有这一个就够了...
- 京东数科宣布机房巡检AI机器人落地金融机构数据中心
- layui动态生成的下拉框被遮住
- 15 CO配置-控制-内部订单-维护分配结构
- Android开发笔记(一百六十五)利用红外发射遥控电器
- Observable与Observer
- 测试文档模板_学会word2007创建自定义模板的方法,让你新建的文档结构都一致...
- 坚持开源、能力内化,中移苏研荣获“中国开源领军企业”大奖!
- 数学模型学习——图与网络
- 微信签到积分换卷小程序(完整前后台)
- USB通信协议与供电协议全解
- 基于SpringBoot + Vue的个人博客系统16——文章的修改和删除
- [Windows]_[中级]_[界面程序打开控制台输出-转发输出到控制台]
- JAVA Stream的collect用法与原理(详解)
- Gitlab: 常用设置
- python爬取英雄联盟所有皮肤价格表_利用Python协程来爬取LOL所有英雄的皮肤高清图片...
- MCE | HIV 衣壳蛋白有望成为 HIV 治疗新靶标
热门文章
- 最大乘积java_《算法入门经典》-最大乘积(java实现)
- vue 高德轨迹自定义两点之间的颜色_vue 还是 react?这是一个问题
- jsp java代码取session_jsp中的session在java文件中取到
- java编译遇到的问题与解决_java web开发中遇到的问题及解决方案(个人学习日志,持续更新)...
- 线段树模板1(例题BZOJ1012)单点修改+区间查询
- Android 实现卫星菜单
- 基于局部敏感哈希的协同过滤算法之simHash算法
- Java面向对象 网络编程 上
- CodeForces - 798B Mike and strings
- Bailian4018 子串【字符串】