iOS宏定义

本文详细探讨了iOS开发中宏定义的概念、使用场景及其优缺点,包括预处理器宏的定义、条件编译和常见宏技巧。通过实例解析,帮助开发者更好地掌握宏在iOS项目中的应用。
摘要由CSDN通过智能技术生成
 1.宏定义需要加括号的两种情况:
   (1)如果宏的替换列表中带有运算符,那么使用要将替换列表放到括号中。例如#define MAX_VALUE(X,Y) ((X) > (Y) ? (X) : (Y))
   (2)如果宏有参数,每次参数在替换列表中出现时都要放在括号中。同上
#define MAX_VALUE(X,Y) ((X) > (Y) ? (X) : (Y))// 求两个数中的最大值

 2.#运算符和##运算符
 (1)出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。有时把这种用法的#称为字符串化运算符。例如:
 #define PASTE(n) "adhfkj"#n
 main()
 {
 printf("%s\n",PASTE(15));
 }
 宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。所以输出应该是adhfkj15。

针对Window,dos,os2不同的系统对WIDTH进行不同的定义
单独一行的#是空指令
#ifdef WINDOWS
#
#define WIDTH 375
#
#elif defined(DOS)
#
#define WIDTH 414
#
#elif defined(OS)
#
#define WIDTH 320
#
#else
#
//#error no sysytem;
#
#endif
 (2)##运算符用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。看下面的例子:
 #define NUM(a,b,c) a##b##c
 #define STR(a,b,c) a##b##c
 main()
 {
 printf("%d\n",NUM(1,2,3));
 printf("%s\n",STR("aa","bb","cc"));
 }
 最后程序的输出为:
 123
 aabbcc

#define IMAGE_NAME(NAME) @"image_name"#NAME // IMAGE_NAME(3)=image_name3
#define STR(NAME,AGE,SEX) @"名字:"#NAME@".年龄:"#AGE@".性别:"#SEX// 名字:@“王五".年龄:24.性别:@"男"

 3.取消宏定义
 #undef NUM1

 4.复杂宏的定义
#define NSLOG_ARRAY_OR_DICT(ARRAY,DICT) (NSLog(@"array = %@,dict = %@",[(ARRAY) description],[(DICT) description]));
//设计技巧:dowhile中出现;
#define NSLOG_ARRAY_OR_DICT2(ARRAY,DICT) do {int a =1;NSLog(@"a = %d",a);NSLog(@"array = %@,dict = %@",[(ARRAY) description],[(DICT) description]);}while(0)

5.条件编译args...表示有多个参数
(1)打印信息
#define DEBUG1
#if DEBUG
#define MY_NSLog(fmt,args...) NSLog(@fmt,##args)
#else
#d
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值