美文网首页
iOS预处理宏使用指南

iOS预处理宏使用指南

作者: happycolt | 来源:发表于2018-06-13 16:07 被阅读33次

    预处理宏使用指南

    预处理就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。

    常用宏说明

    #define  定义一个预处理宏
    #undef   取消宏的定义
    #if      编译预处理中的条件命令, 相当于C语法中的if语句
    #ifdef   判断某个宏是否被定义(#define过), 若已定义, 执行随后的语句
    #ifndef  与#ifdef相反, 判断某个宏是否未被定义
    #elif    若#if, #ifdef, #ifndef或前面的#elif条件不满足, 则执行#elif之后的语句, 相当于C语法中的else-if
    #else    与#if, #ifdef, #ifndef对应, 若这些条件不满足, 则执行#else之后的语句, 相当于C语法中的else
    #endif   #if, #ifdef, #ifndef这些条件命令的结束标志.
    defined   与#if, #elif配合使用, 判断某个宏是否被定义
    #pragma  说明编译器信息
    #warning 显示编译警告信息
    #error   显示编译错误信息
    

    宏的使用步骤

    1.如在 "Target > Build Settings > Preprocessor Macros > Debug" 设置"DEBUG=1”。
    
    2.之后在pch或工具类中就可以这么写了:
    #ifdef DEBUG  
    (debug 模式下的配置)
    #else  
    (release 模式下的配置)
    #endif 
    

    #ifdef使用说明

    #ifdef _XXXX   //(ifdef=>if define)
        代码块1
    #elif defined _YYYY   //(相当于else if)
        代码块2
    #else
        代码块3
    #endif
    

    如果_XXXX已被#define或Preprocessor Macros中定义过,则对代码块1进行编译,如果没有定义_XXXX但定义了_YYYY,则编译代码块2,否则只对代码块3进行编译。

    注意:#ifdef后面接的是一个宏

    #ifndef使用说明

    #ifndef _XXXX   //(ifndef=>if not define)
        代码块1
    #else
        代码块2
    #endif
    

    #ifndef和#ifdef是相反的情况,如果没有定义宏_XXXX,那么就会编译代码块1,否则会编译代码块2

    #if使用说明

    #if 常量或表达式
        代码块1
    #else
        代码块2
    #endif
    

    如果常量为真(非0),就编译代码块1,否则编译代码块2

    注意:#if后必须是常量,不能是宏,因为宏是运行阶段才有,#if是预编译阶段,会找不到宏

    最后强调一点:这几个宏定义只是决定代码块是否被编译,而不是被执行。

    常用示例

    1.判断真机或模拟器

    #if TARGET_OS_IOS
        NSLog(@"真机测试");
    #endif
    
    #if TARGET_IPHONE_SIMULATOR
        NSLog(@"模拟器");
    #endif
    

    2.获取当前设备的iOS版本

    #define kIOSVersion  [[UIDevice currentDevice].systemVersion doubleValue]
    

    相关文章

      网友评论

          本文标题:iOS预处理宏使用指南

          本文链接:https://www.haomeiwen.com/subject/ornjeftx.html