美文网首页
iOS 宏定义

iOS 宏定义

作者: 林帅并不帅 | 来源:发表于2017-02-10 15:53 被阅读0次

    初学ios不久时间,对ios的宏定义充满好奇,宏的各种高级用法让ios代码变得优雅,那么宏究竟是什么,让我来花时间记录学习一下。

    宏定义使用关键字#define,分为对象宏(object-like macro)和函数宏(function-like macro)。

    对象宏:

    // 定义:#define PI  3.14159265358979323846264338327950288

    // 使用:double circlePerimeter = 2 * PI * 10.0;

    函数宏:

    // 定义:#define  MIN(A,B) A < B ? A : B

    // 使用:MIN(1,2) // 1

    预定义宏:

    前后双下杠的一般都是预定义宏,例如__FILE__返回当前文件的绝对路径,__VA_ARGS__表示宏定义中的...中的所有剩余参数。

    高级用法:

    #define  MIN(A,B)    ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __a : __b; })

    括号里定义一个方法,为防止在A的部分传入运算,所以优先以输入的类型申明了__a和__b,并使用输入为其赋值,这样是为了避免A或B的运算在代码中被运算多次导致出错。

    #define  TEST  do {   xxx   } while(0)

    do while(0) 写法表面上看多余,但是解决了分号的问题,如果xxx代表一个代码段,那么当这个代码段被替换后,可能会因为末尾的分号导致错误发生。

    #define NSLog(format, ...)  fprintf(format, __VA_ARGS__)

    ...是可变参数列表,它可以代表一个、两个,或者是很多个参数,但同时它也能代表零个参数,使用标识符__VA_ARGS_来表示宏定义中的...中的所有剩余参数。用一个例子来说明:

    #define bb_argcount(...) bb_at(10, __VA_ARGS__,10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

    #define bb_at(N,...) bb_concat_at##N (__VA_ARGS__)

    #define bb_concat_at10(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,...) bb_head(__VA_ARGS__)

    #define bb_head(...) bb_head_first(__VA_ARGS__,0)

    #define bb_head_first(first,...) first

    //调用示例:int count=bb_argcount(a,b,c,d,e);  NSLog(@" count is :%d",count);

    //输出: count is :5

    #ifdef DEBUG

    #define  xxx

    #else

    #define xxx

    #endif

    实现条件宏定义

    其他:

    使用#预处理操作符来实现将宏中的参数转化为字符串

    使用##操作符可以实现连接

    多行时,在末尾添加‘\’线

    参考文章:

    宏定义的黑魔法 - 宏菜鸟起飞手册

    相关文章

      网友评论

          本文标题:iOS 宏定义

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