#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

#if, #ifdef, #ifndef, #else, #elif, #endif的用法相关推荐

  1. c++ 预处理命令 #if, #ifdef, #ifndef, #else, #elif, #endif用法

    #if, #ifdef, #ifndef, #else, #elif, #endif用法 #if, #ifdef, #ifndef, #else, #elif, #endif #if, #ifdef, ...

  2. 【Scripts系列】之Makefile中条件分支ifeq/else/endif/else ifeq/ifneq/ifdef/ifndef用法详解

    DATE: 2019-2-22 前言       条件分支的用法在任何编程语言和脚本以及逻辑中都广泛使用.前文讲述过C语言中预处理的条件编译#ifdef/#if/#elif/#else/#endif用 ...

  3. C语言中宏定义宏编译的使用#if,#ifdef,#ifndef,#elif,#else,#endif,defined使用详解,可以实现和if else一样的效果

    #define            定义一个预处理宏 #undef            取消宏的定义 #if                   编译预处理中的条件命令,相当于C语法中的if语句 ...

  4. #ifdef,#else,#endif,#if用法详解(转)

    #ifdef,#else,#endif,#if用法详解(转) 2011-04-22 10:11 预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作.说白了,就是对源文件进行编译前,先对预处理 ...

  5. c++语言中ifndef和endif的用法

    1.#ifndef "if not defined"的简写,是宏定义的一种,它是可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等.实际上确切的说这应该是预处理功能中三种 ...

  6. c/c++头文件中#ifndef/#define/#endif的用法

    想必很多人都看过"头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用".但是是否能理解"被重复引用"是什么意思?头文件被重复 ...

  7. uni-app条件编译:#ifdef #ifndef #endif

    uni-app条件编译:#ifdef #ifndef #endif 语法: // #ifdef %PLATFORM% 这些代码只在该平台编译 // #endif #ifdef : if defined ...

  8. #ifndef #defin #endif的用法

    #ifndef #defin #endif的用法: 1. 当有两个c文件,并且两个c文件都include了同一个头文件,在编译为同一个可运行文件时就会产生大量声明冲突. 所以就需要将头文件的内容都放在 ...

  9. C++中 #ifdef 和#endif的用法与作用详解

    一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是"条件编译".有时,希望当满足某条件时对一组 ...

最新文章

  1. 第二十三模板 18标准模板库
  2. MapReduce分区-原理
  3. 从头开始vue创建项目_我正在以设计师的身份开始一个被动的收入项目。 从头开始。...
  4. 角标越界 Java_【新人求助】利用占位符操作数据库是总是提示数组角标越界是怎么回事 - Java论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  5. Pentium II Pentium III架构/微架构/流水线 (7) - 微架构框图
  6. 有用的Flex Builder快捷键
  7. SVN-功能介绍之切换
  8. fgo7.27服务器维护,【公告】更新游戏数据资料(7/27 实施)
  9. 架构模式: 微服务的基底
  10. 手把手教你如何破解无线路由密码
  11. 实用的技巧之免费下载百度文库VIP文章
  12. 小宝智能机器人-智能-教育-情商高-家用教育商用一体机器人
  13. 前端博站项目中遇到的问题总结
  14. android locat
  15. 二维码的生成细节和原理源码
  16. wifi7000米远程连接服务器失败,【电视派控制设备连wifi总失败 怎么办?】PjTime.COM 应用技巧 创维...
  17. 当你凝视深渊时,深渊也在凝视着你。
  18. H - 悼念512汶川大地震遇难同胞——一定要记住我爱你
  19. Nginx学习(一)
  20. c# listview控件上移下移功能函数

热门文章

  1. iOS进阶之正则表达式
  2. 使用VS2010编译Qt 5.6.1过程记录
  3. BestCoder Round #39 解题报告
  4. Selenium介绍
  5. 数据结构排序法之鸡尾酒排序法he快速排序法
  6. 1.springboot:入门程序
  7. 使用Jmeter对mysql进行性能测试入门
  8. Windows PowerShell:(2)基本操作
  9. 2013腾讯编程马拉松初赛(3月20日)
  10. TCP三次握手及四次挥手详解