ios

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

2017-05-27  本文已影响164人  CoderZb
一、常规格式:如果(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版本


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


#ifdef DEBUG

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

#else

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

#endif

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

Snip20170614_38.png

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

  unterminated conditional directive
#define ISDEVBOOL
#ifdef ISDEVBOOL // 开发环境
#define REQUEST_MAINLINK_ROOT @"https://ym2.0633hr.com/" // 测试服务器地址
#else
#define REQUEST_MAINLINK_ROOT @"https://yimiaozhaopin.com/" // 正式服务器地址
#endif

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

image.png
image.png
上一篇 下一篇

猜你喜欢

热点阅读