条件编译(#ifdef 、#ifndef 、#if)(摘)
2015-08-30 19:47
169 查看
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。经过处理后的代码,将会变的很精短。
关于预处理命令中的文件包含(#include),宏定义(#define),以下分3种情况:
1 情况
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
例:
#define NUM
.............
.............
.............
#ifdef NUM
printf("之前NUM有过定义!:) \n");
#else
printf("之前NUM没有过定义!:( \n");
#endif
}
如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。
用这种,可以很方便的开启/关闭整个程序的某项特定功能。
2 情况
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。例子就不举了。
3 情况
#if 常量
...程序段1...
#else
...程序段2...
#endif
这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。
关于预处理命令中的文件包含(#include),宏定义(#define),以下分3种情况:
1 情况
#ifdef _XXXX
...程序段1...
#else
...程序段2...
#endif
这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
例:
#define NUM
.............
.............
.............
#ifdef NUM
printf("之前NUM有过定义!:) \n");
#else
printf("之前NUM没有过定义!:( \n");
#endif
}
如果程序开头有#define NUM这行,即NUM有定义,碰到下面#ifdef NUM的时候,当然执行第一个printf。否则第二个printf将被执行。
用这种,可以很方便的开启/关闭整个程序的某项特定功能。
2 情况
#ifndef _XXXX
...程序段1...
#else
...程序段2...
#endif
这里使用了#ifndef,表示的是if not def。当然是和#ifdef相反的状况(如果没有定义了标识符_XXXX,那么执行程序段1,否则执行程序段2)。例子就不举了。
3 情况
#if 常量
...程序段1...
#else
...程序段2...
#endif
这里表示,如果常量为真(非0,随便什么数字,只要不是0),就执行程序段1,否则执行程序段2。
这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。
相关文章推荐
- Swift入门篇-集合
- Does FTK index search support regular expression?
- MySQL-5.6.15 +vs2012 源代码安装
- 搭建本地yum仓库
- 剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)
- Debug JDK source 无法查看局部变量的问题解决方案
- 剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)
- ubuntu-14.04.2-desktop使用方法
- 51Nod 1181-质数中的质数(质数筛法)
- TAE 2.0 Python 部署webpy(一)——模板路径问题
- [闪屏页]实现简单动画效果的闪屏页
- Coursera-C程序设计进阶-编程题#4:Tomorrow never knows?
- Swift入门篇-循环语句
- HDU 4442 Physical Examination
- Android学习笔记(十五)
- Ogre 1.8.1源代码编译和错误修改
- 谷歌B4广域网论文笔记
- 【国家集训队2012】【BZOJ2671】Calc和与积
- java并发编程实战第六章(1)并发集合介绍
- 线性约束最优化问题的Frank-Wolfe方法