#define的一些用法
2016-07-08 09:32
288 查看
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]
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]
相关文章推荐
- 自定义Android Studio主题风格--基于sublime3修改而来的
- POJ 2492 虫子交配
- 广义表的长度和广义表的深度
- 重新编译jdk,使其带有调试信息
- 李洪强iOS开发之OC语言构造方法
- sysconf、pathconf和fpathconf函数
- scheduleOnce的注意事项
- sysconf()
- 使用GPU加速H.264编码分析
- UML类图符号 各种关系说明以及举例(转载)
- 读取Excel表格数据存入mongodb数据库
- tcpdump
- uibutton图片,文字上下排列
- linux 系统调用sysconf【总结】
- maven学习随记
- Intersection of Two Arrays II
- 关于float的感悟
- maven pom.lastupdated
- Swift-基础语法之变量&常量&元组
- CSS中交集选择器详解