美文网首页ios
iOS预处理指令及其应用 (宏)【例如#ifdef】

iOS预处理指令及其应用 (宏)【例如#ifdef】

作者: CoderZb | 来源:发表于2017-05-27 09:09 被阅读164次
一、常规格式:如果(1)满足,就执行(2),否则执行(3)
#ifdef (1)

(2)

#else

(3)

#endif

二、常用预处理命令介绍
#if                      编译预处理中的条件命令, 相当于C语法中的if语句
#ifdef                 判断某个宏是否被定义, 若已定义, 执行随后的语句
#endif               #if, #ifdef, #ifndef这些条件命令的结束标志.
#define              定义一个预处理宏


#undef               取消宏的定义
#include            包含文件命令
#include_next   与#include相似, 但它有着特殊的用途
#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配合使用, 判断某个宏是否被定义
#line                标志该语句所在的行号
#                      将宏参数替代为以参数值为内容的字符窜常量
##                   将两个相邻的标记(token)连接为一个单独的标记
#pragma        说明编译器信息#warning       显示编译警告信息
#error            显示编译错误信息
#define SAFE_RELEASE(obj) if(obj){[obj release];obj=nil;} 释放

   1) __VA_ARGS__ 是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
  2) __FILE__ 宏在预编译时会替换成当前的源文件名
  3) __LINE__宏在预编译时会替换成当前的行号
  4) __FUNCTION__宏在预编译时会替换成当前的函数名称

三.、利用预处理指令判断当前环境的Xcode版本

  • 用xcode 8.3.2运行了如下代码:


    image.png

四、利用预处理指令进行测试服务器地址和生产服务器地址的切换。链接


#ifdef DEBUG

static NSString *const kFPBaseUrl =@"http://(1)测试服务器地";

#else

static NSString *const kFPBaseUrl =@"http://(2)生产服务器地址";

#endif

五、利用预处理进行开发环境与线上环境的判断

  • 通过宏定义一个#define ISDEVBOOL,然后将这个宏作为预处理命令的参数,通过判断这个参数有没有值,来实现开发环境与线上环境的判断。开发中我们手动注释这个值,那么就执行线上环境的BaseUrl;不注释的话,就执行开发环境的BaseUrl.
  • 详情请见如下截图:
Snip20170614_38.png

以上图片有个错误,注意到了吗?没注意的话,项目中会提示如下错误

  unterminated conditional directive
  • 解决办法:不要忘记写#endif.正确的类似代码如下:
#define ISDEVBOOL
#ifdef ISDEVBOOL // 开发环境
#define REQUEST_MAINLINK_ROOT @"https://ym2.0633hr.com/" // 测试服务器地址
#else
#define REQUEST_MAINLINK_ROOT @"https://yimiaozhaopin.com/" // 正式服务器地址
#endif

六、利用预处理执行进行NSLog或者自定义Log的全局显示和隐藏

    1. Release状态下


      image.png
      Snip20170527_11.png
    1. Debug状态下
image.png
image.png

相关文章

  • iOS预处理指令及其应用 (宏)【例如#ifdef】

    一、常规格式:如果(1)满足,就执行(2),否则执行(3) 二、常用预处理命令介绍 三.、利用预处理指令判断当前环...

  • objc-init

    编译过程 预处理包含以下内容:(1)宏定义指令(2)条件编译指令,如#ifdef,#ifndef,#else,#e...

  • #pragma clang diagnostic

    作为预处理指令,#pragma 在编译时进行计算。但它并不像如 #ifdef…#endif 之类的宏,#pragm...

  • C/C++预处理指令#define,#ifdef,#ifndef

    C/C++预处理指令#define,#ifdef,#ifndef,#endif…

  • iOS-#ifdef DEBUG宏定义介绍

    iOS-#ifdef DEBUG宏定义介绍 一.#ifdef DEBUG代码块 #ifdef DEBUG // D...

  • iOS开发 -- C语言基础12(预处理指令)

    iOS开发 -- C语言基础12(预处理指令) 宏定义 预处理指令简介 1.C语言在对源程序进行编译之前,会先对一...

  • C语言 枚举类型和预处理指令

    枚举的定义 预处理指令 所有的预处理指令都是以#开头 预处理指令分为三种 宏定义 条件编译 文件包含 预处理指令在...

  • 编译过程

    1、预编译(1)宏定义指令,如 #define a b(2)条件编译指令,如#ifdef,#ifndef,#el...

  • 09预处理&枚举&静态变量

    预处理 任何一个应用程序编译的第一步就是“预处理” “预处理”阶段,会将所有#开头的预处理指令处理掉 一丶宏定义 ...

  • Day12

    预处理指令 宏定义 基本格式 不带参数的宏定义 带参数的宏定义 宏定义的作用域 条件编译 基本格式 应用场景用来替...

网友评论

    本文标题:iOS预处理指令及其应用 (宏)【例如#ifdef】

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