http://www.tuicool.com/articles/mIJnumB

#ifdef的用法

灵活使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码。
代码举例:新建define.cpp文件

  1. #include "iostream.h"
  2. int main()
  3. {
  4. #ifdef DEBUG
  5. cout<< "Beginning execution of main()";
  6. #endif
  7. return 0;
  8. }

运行结果为:Press any key to continue

改写代码如下:

  1. #include "iostream.h"
  2. #define DEBUG
  3. int main()
  4. {
  5. #ifdef DEBUG
  6. cout<< "Beginning execution of main()";
  7. #endif
  8. return 0;
  9. }

运行结果为:Beginning execution of main()
Press any key to continue

更一般的情况是,#define语句是包含在一个特定的头文件中。
比如,新建头文件head.h,在文件中加入代码:

  1. #ifndef DEBUG
  2. #define DEBUG
  3. #endif
  4. 而在define.cpp源文件中,代码修改如下:
  5. #include "iostream.h"
  6. #include "head.h"
  7. int main(){
  8. #ifdef DEBUG
  9. cout<< "Beginning execution of main()";
  10. #endif
  11. return 0;
  12. }

运行结果如下:Beginning execution of main()
Press any key to continue
结论:通过使用#ifdef指示符,我们可以区隔一些与特定头文件、程序库和其他文件版本有关的代码

#if, #ifdef, #ifndef, #else, #elif, #endif的用法:

这些命令可以让编译器进行简单的逻辑控制,当一个文件被编译时,你可以用这些命令去决定某些代码的去留,

这些命令式条件编译的命令。

常见的条件编译的三种形式:

①第一种形式:  
#if defined(或者是ifdef)<标识符(条件)>

<程序段1>

#endif  
②第二种形式:  
#if !defined(或者是ifndef)<标识符(条件)>

<程序段1>

#ifdef …

[#elif … ]

[#elif …]

#else …

#endif

示例:

#include <iostream>

using namespace std;

int main() 

#if DEBUG  /*或者是#ifdef DEBUG*/ 
cout << "条件成立,DEBUG已经定义了!" <<endl; 
#else 
cout << "条件不成立,DEBUG还没定义" <<endl; 
#endif 
return 0; 
}

//结果输出: 条件不成立,DEBUG还没定义

//如果是添加了#define DEBUG ,输出结果是:条件成立,DEBUG已经定义了!

#include <iostream> 
using namespace std; 
#define DEBUG 
int main() 

#ifdef DEBUG /*或者是#ifdef DEBUG*/ 
cout << "条件成立,DEBUG已经定义了!" <<endl; 
#else 
cout << "条件不成立,DEBUG还没定义" <<endl; 
#endif 
return 0; 
}

//要注意的是,如果是#define 宏名,没有宏体如 #define DEBUG,就必须使用#ifdef或#ifndef与之对应,

//如果是#define 宏名 宏体,如 #define NUM 1,#if 和#ifdef都可以使用。

/*

#define的用法:

*/

示例二:

#include <iostream> 

using namespace std; 
#define NUM  10 
int main() 

        #ifndef NUM 
        cout << "NUM没有定义!"<<endl; 
        #elif NUM >= 100 
        cout << "NUM >100" <<endl; 
        #elif NUM <100 && NUM >10 
        cout << "10 < NUM < 100" <<endl; 
        #elif NUM == 10 
        cout << "NUM ==10" <<endl; 
        #else 
        cout << "NUM < 10" << endl; 
        #endif 
        return 0; 

//输出NUM ==10 

也可以在mk文件定义NUM

ifeq ($(BOARD_SCREENRECORD_LANDSCAPE_ONLY),true)
LOCAL_CFLAGS += -DNUM
endif

c++ #ifdef的用法的更多相关文章

  1. #ifdef的用法【转】

    #ifdef的用法     #ifdef的用法灵活使用#ifdef指示符,我们可以区隔一些与特定头文件.程序库和其他文件版本有关的代码.代码举例:新建define.cpp文件 #include &qu ...

  2. 【转】#ifdef _DEBUG用法小结

    原文地址:http://blog.csdn.net/shijizhisheng/article/details/1908054 1 #ifdef _DEBUG virtual void AssertV ...

  3. #ifdef endif 用法

    "#ifdef 语句1 程序2 #endif“ 可翻译为:如果宏定义了语句1则程序2. 作用:我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码. 代码举例:新建define. ...

  4. 编译预处理命令--define和ifdef的使用

    这里将对常用的预处理命令进行学习. 一.宏定义  ·defined 格式:`defined     宏名      数值 或者 `define      宏名 注意:后面没有‘;‘,和单片机不一样: ...

  5. #if 与 #ifdef 之间的区别

    先来看个例子: #define TARGET_LITTLE_ENDINA 1 #define TARGET_BIG_ENDINA 0 #ifdef TARGET_LITTLE_ENDINA call ...

  6. 关于#ifdef #ifndef

    https://www.cnblogs.com/agnily/p/5848768.html 1.先看#ifdef的用法: #define KEY1_PA0 #ifdef KEY1_PA0 ------ ...

  7. C++ "#"的作用和用法

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/48879093 1 #和##的作用和用法 ...

  8. 90.#define高级用法

    define把参数变成字符串 #define f(x) printf("%s",#x); define连接两个字符串 #define a(x) a##x define把参数变成字符 ...

  9. #if 和#ifdef的区别

    转自:https://blog.csdn.net/zhangchiytu/article/details/7563329 先看个例子:#define TARGET_LITTLE_ENDINA 1#de ...

随机推荐

  1. JavaScript:document.execCommand()的用法

    document.execCommand()的用法小记 一.语法 execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令.处理Html数据时常用. 如下格式:document.ex ...

  2. k8s集群master节点上的flannel总是不定期重启的原因分析

    这个问题,困绕了团队一段时间, 因为暂时没有用到master的外网网络, 没有引起重视,但总归要解决. 上周五,刚好有点小空,就深入调查了一下. 最后,定位到了问题点:k8s master节点的fla ...

  3. Ubuntu下安装软件提示无法锁定管理目录(/var/lib/dpkg/)的解决办法

    Ubuntu下安装软件提示无法锁定管理目录(/var/lib/dpkg/)的解决办法   在安装软件的时候,有时候提示,无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 这是 ...

  4. POJ 3009 Curling 2.0(DFS + 模拟)

    题目链接:http://poj.org/problem?id=3009 题意: 题目很复杂,直接抽象化解释了.给你一个w * h的矩形格子,其中有包含一个数字“2”和一个数字“3”,剩下的格子由“0” ...

  5. 社会地位即服务, Status as a Service (一): 社交网络是一种 ICO 行为?

    上周,看到 Eugene Wei 又发了一篇长文,Status as a Service (StaaS).状态即服务?服务器的状态吗?不知所言.抱着好奇,我打开了这篇文章,一看就是 3 个小时!

  6. java 中的同步机制

    对于有些场景,需要a.b线程按照顺序去执行,因为b线程要依赖a线程对某共享资源或 状态处理后,对于这种情况可以使用 private CountDownLatch connectedSignal = n ...

  7. 每日踩坑 2018-11-26 MVC Razor ActionLink 生成的URL中多生成了一个参数 ?length=n

    RouteConfig 的路由注册如下: routes.MapRoute( name: "Default", url: "{controller}/{action}&qu ...

  8. hdu 3289 最大独立集

    题意:一个动物园里有N只猫和K只狗,一些小朋友来参观,他们如果喜欢狗就不喜欢猫,喜欢猫就不喜欢狗,园长想要移走一些动物,如果,移走的是某个小朋友不喜欢的,而喜欢的没被移走,该小朋友就会高兴,求移动的数 ...

  9. VMware vsphere Hypervisor、VMware vsphere和VMware Workstation小记

    VMware Workstation软件需要依赖于宿主操作系统之上. VMware vSphere是VMware公司推出一套服务器虚拟化解决方案,它是可以直接独立安装和运行在祼机上的系统. VMwar ...

  10. Django-Filter源码解析一

    Django Filter源码解析 最近在看Django-FIlter项目的源码,学习一下别人的开发思想: 整体介绍 首先,我从其中一个测试用例作为入口,开始了debug之路,一点一点的断点,分析它的 ...