#define的一些用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Number_One_2015/article/details/51858259


1.define的多行定义

define可以替代多行的代码,在每一个换行的时候加上一个"\"

#define MAX(X,Y) do { \

语句1; \

语句2; \

/* 注释的写法 */ \

} while(0) /* (no trailing ; ) */ \

 例子:

#define FZUserInfoReset \

[[NSUserDefaults standardUserDefaults] setObject:kDefaultUserName forKey:Key_UserName];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_LoginToken];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_MemberID];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_HeadImage];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_Gender];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_NewMessage];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_RoleType];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_Tag];\

[[NSUserDefaults standardUserDefaults] removeObjectForKey:Key_BindingTag];\

[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:Key_UserCash];\

[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:Key_UserCredits];\

[[NSUserDefaults standardUserDefaults] setObject:@"0" forKey:Key_UserTickets]


2.在大规模的开发过程中,特别是跨平台和系统的软件里,define最重要的功能是条件编译。

#ifdef WINDOWS

......

......

#endif

#ifdef LINUX

......

......

#endif

可以在编译的时候通过#define设置编译环境


3.带参数的宏
#define 标识符(x1,x2,x3...xn) 替换列表  (注意:x1,x2,x3..是宏的参数,标识符和其左括弧之间不能有空格)
使用方法:
#define MAX(x,y) ((x)>(y)?(x):(y))
i=MAX(j+k,m-n);
替换为:
i=MAX((j+k)>(m-n)?(j+k):(m-n));
#define SI_EX(n) ((n)%2==0)
if(SI_EX(i)) i++;
替换为:
if(SI_EX((i)%2==0))
通过以上例子我们可以看出,标识符带参数(X1,X2,X3.....)在替换时会被替换列表(Y1,Y2,Y3....)对应的替换,但是和顺序无关。
例子:


#define FZUserInfoWithKey(key)\

[[NSUserDefaults standardUserDefaults] objectForKey:key]


猜你喜欢

转载自blog.csdn.net/Number_One_2015/article/details/51858259