CC++指令#undef,#ifdef,#ifndef,#if的用法
更新时间:2023-09-28 21:18:01 阅读量: 综合文库 文档下载
C/C++指令 #undef ,#ifdef, #ifndef,#if的用法
#ifdef,#ifndef使用
条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif
它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。
其中#else部分也可以没有,即: #ifdef 程序段1 #denif
这里的“程序段”可以是语句组,也可以是命令行。这种条件编译可以提高C源程序的通用性。如果一个C源程序在不同计算机系统上系统上运行,而不同的计算机又有一定的差异。例如,当程式跑到else,如果TRACE没被定义,则下一句再定义
源代码:
#define TRACE(x) #if DBG #undef TRACE
#define TRACE(x) g_TraceCallback x #else
#ifndef TRACE #define TRACE(x) #endif #endif 解析:
#define TRACE(x) #if DBG #undef TRACE
#define TRACE(x) g_TraceCallback x #else
#ifndef TRACE //如果之前没定义,则跑下边定义------该例前边有#define TRACE(x) ,则后边的定义自动失效因此不会因为重复定义而出错 #define TRACE(x) //定义 #endif #endif
我们有时也采用下面的形式: #ifndef 标识符 程序段1 #else 程序段2 #endif
只是第一行与第一种形式不同:将“ifdef”改为“ifndef”。它的作用是:若标识符未被定义则编译程序段1,否则编译程序段2。这种形式与第一种形式的作用相反。 以上两种形式用法差不多,根据需要任选一种,视方便而定。
还有一种形式,就是#if后面的是一个表达式,而不是一个简单的标识符: #if 表达式 程序段1 #else 程序段2 #endif
当表达式成立,则跑程序段1,否则跑程序段2 注意:
除#undef释放之前的宏定义可单独使用之外, #ifdef,#if,#ifndef均要与#endif配对 如:
#if...#else...#endif #ifdef...#endif #ifndef...#endif
以下转自:http://blog.csdn.net/bigpretty/article/details/5018261
一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件
编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。
条件编译命令最常见的形式为: ///////// #ifdef 标识符 程序段1 #else 程序段2 #endif
它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。
其中#else部分也可以没有,即: #ifdef 程序段1 #denif
在头文件中使用#ifdef和#ifndef是非常重要的,可以防止双重定义的错误。如你在头文件aaa.h中定义了一个类aaa如下: class aaa { };
如果两次#include \(不见得是直接,也有可能两个不同的头文件中都包含了这个头文件)就会出错,因为相同的类不能定义两次。把aaa.h稍做修改: #ifndef _aaa_ #define _aaa_ class aaa { }; #endif
就可以避免这样的问题。因为当你已经包含过这个文件,_aaa_就会有了定义,那么#ifndef的条件为假,就不会再执行后面的类定义了。
#ifdef和#endif必须成对使用。
从理论上讲可以出现在任何地方(头文件和实现文件中) 通常为了防止头文件被多次包含,在头文件中使用是必须的:
如:#ifndef MY_HEAD_H //头文件开头,名字是任意的,注意不要和其它头文件冲突
头文件声明
#endif //头文件结尾
正在阅读:
CC++指令#undef,#ifdef,#ifndef,#if的用法09-28
2019-2020年九年级英语上学期 Lesson39 课时训练 冀教版05-16
开展创先争优活动领导点评情况汇报-word范文(3页)03-18
利用多媒体网络优化小学数学教学06-06
PIC单片机与串行闪存的SPI接口设计07-29
高中历史必修一第6课完整09-30
在全区扶助贫困中学生活动启动仪式上的03-06
2022年江西财经大学金融学之国际金融考研复试核心题库04-10
2017菏泽市初中学业水平考试语文试题11-25
第五章和第七章综合测验09-28
- Win7 安装MySql图示
- 计算器课程设计报告
- 部编版八年下语文第三单元第六单元古诗文理解默写练习及答案
- 13质量通病防治方案和施工措施
- 土力学试题~~~~
- 公务员打印资料
- 传热膜系数测定实验报告 - 图文
- 新时期煤矿协管安全工作的创新与实践
- 第五章 习题及参考答案
- 220kV架空线路强条执行记录表
- 音乐欣赏读后感
- 高炉
- 劳动教育需要新的时代内涵
- 10建筑地面工程施工质量验收规范GB50209-20021
- 银行会计练习题2答案
- 2013年七年级地理上册知识点复习提纲湘教版
- 人教版三年级语文上册第四单元测试题(A卷)(有答案)
- 营养师第九章练习题
- 湖北省武汉市2018届高三毕业生二月调研 理综化学
- 行业分析2018-2023年中国男性护肤品行业市场发展分析及投资前景
- 指令
- 用法
- ifndef
- undef
- ifdef
- CC
- 广州市番禺区2017学年第一学期九年级语文科期末测试题(含答案)
- 分层注水工艺现状及发展趋势-采油院
- SAP HR Schema 详解
- 如皋市房屋拆迁补偿价评估技术规范及补助标准指导意见的通知
- 部编三上语文《父亲、树林和鸟》教学设计
- 2011最新个税速算扣除及新旧个税对比
- 控制系统的稳定性
- 钢管叠合柱方案
- 浮生六记朗诵(歌词)
- 哈尔滨工业大学 - 电工学 第二十一章:门电路和组合逻辑电路 - 图文
- 4轴加工中心机械手自动换刀装置的设计
- 课堂教学中师生互动关系研究结题报告
- 材料作文:忘记过去,重新开始
- 雨宝陀罗尼- 威力能获一切财宝伏藏秘密神咒 - 图文
- 特色寝室评比评分标准
- 调酒师考核试题
- (第五版)预防医学 - 实习指导 - 答案
- 幼儿园午睡值班老师制度范文
- 综合大作业
- 新CC六方位绕车剧本