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. js和css实现内容超过边框,就自动省略,自动添加title

    在项目汇总,我们有这样的需求,如果内容多了,就自动省略,自动添加title 这个需要判断判断俩个值,一个是width(),一个是scrollWidth, 在div中,如果内容没有超过边框,这俩个值是一 ...

  2. Oracle学习笔记:with as子查询用法

    With as短语,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到.该语句会在真正的查询之前预先构造一个临时表,之后可以多次使用做 ...

  3. Top 10 Best Free Netflow Analyzers and Collectors for Windows

    https://www.pcwdld.com/best-free-netflow-analyzers-and-collectors-for-windows https://blog.csdn.net/ ...

  4. UVALive - 6709

    二维线段树单点修改板子题 #include<bits/stdc++.h> #define LL long long #define fi first #define se second # ...

  5. CSS------如何让ul中的li分为两列甚至多列

    转载: http://blog.sina.com.cn/s/blog_7f13f92a0100rkfg.html 只需要复制ul和li中的style样式即可 如果需要自定义多少列,只需要修改li中的w ...

  6. ps -aux与ps -ef

    ps -aux与ps -ef这两个命令显示的结果是差不多的. 不同之处就是显示风格不同,前者是BSD风格,后者SYSTEM V(其实我不太明白这尼玛风格是什么跟什么,我看起来都差不多啊) 然后重要的不 ...

  7. 将 Ubuntu 16.04 LTS 升级到 Ubuntu 18.04 LTS

    将 Ubuntu 16.04 LTS 升级到 Ubuntu 18.04 LTS   Ubuntu 18.04 LTS(Bionic Beaver)即将发布, 如果您正在使用Ubuntu 16.04LT ...

  8. jsp中的隐含9对象

    jsp中的隐含9对象 request ----> HttpServletRequest. response ---> HttpServletResponse. session ----&g ...

  9. Web Service(二):cxf 实现

    1. cxf简介 Web Services 的一种实现方式. Apache CXF = Celtix + XFire,后更名为 Apache CXF ,简称为 CXF. CXF 继承了 Celtix ...

  10. Linux与Windows远程互访(使用Rdesktop与SSH)

    工作的时候经常使用Redhat系列系统,而平常娱乐文档都是在windows平台上进行.因此实现linux与windows远程互访也是很有必要的事情. 本文将介绍如何实现Linux与Windows的远程 ...