zoukankan      html  css  js  c++  java
  • 【C系列】之预处理的条件编译#ifdef/#if/#elif/#else/#endif用法详解

    DATE: 2019-2-21


    前言

    在实现不同模块的代码时,并且不同模块存在复用的代码时,可以采用预处理宏定义#ifdef来实现不同的分支处理。

    1、参考

    https://bbs.csdn.net/topics/210046082

    2、预处理及其作用

    预处理指令共有三种:

    • 宏定义 #define M 2
    • 条件编译 #ifdef/#if/#elif/#else/#endif
    • 文件包含 #include

    预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。

    这里主要讲解预处理中条件编译#ifdef/#if/#elif/#else/#endif使用的几种方式。

    3、预处理的条件编译#ifdef/#if/#elif/#else/#endif使用的几种方式

    方式一:

    #ifdef _XXXX
    ...程序段1...
    #else
    ...程序段2...
    #endif
    

    这表明如果标识符_XXXX已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。
    注意:这种方式#ifdef后面只能跟一个宏变量。

    方式二:

    #ifndef _XXXX
    ...程序段1...
    #else
    ...程序段2...
    #endif
    

    与方式一相反。

    方式三:

    #if 常量 
    ...程序段1...
    #else
    ...程序段2...
    #endif 
    

    这种方法可以将测试代码加进来。当需要开启测试的时候,只要将常量变1就好了。而不要测试的时候,只要将常量变0。

    方式四:

    #if defined(Macro1) || defined(Macro2) || defined(Macro3)
    ...程序段1...
    #elif defined(Macro4)
    ...程序段2...
    #endif
    

    方式四这种方法比较灵活,可以使用多个宏变量的组合(或||or与&&),推荐使用这种方法!

    方式五:

    #if !defined(Macro1) || defined(Macro2) || defined(Macro3)
    ...程序段1...
    #elif !defined(Macro4)
    ...程序段2...
    #endif
    

    THE END!

  • 相关阅读:
    常用资料管理
    IIC学习笔记
    博客的开始
    试用Markdown编辑器
    裁剪方法--layer.makesToBounds 和 clipsToBounds区别和联系
    block循环引用问题--内存泄露
    UITextFiled/UITextView---占位文字的设置
    使用KVC取得私有成员变量时报连线错误
    Xcode开发--运行时runtime
    Xcode开发--屏蔽警告
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532154.html
Copyright © 2011-2022 走看看