#define 用法解析

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

在开发中,会经常遇到申明全局变量的问题,而在Objective-C中,声明全局变量主要有#define、const、extern、FOUNDATION_EXPORT这四种,这篇文章主要讲#define的常见用法和解析,后面几种会在接下来的文章讲解。
在讲#define之前,得先了解下什么叫预处理代码(Preprocessor)。
一、预处理代码(Preprocessor)
预处理代码,即在代码编译之前就被提前处理,这在C语言中,是一个非常强大的工具。利用预处理代码,可以重新定义代码的一部分,使得代码更适合自己的风(逼)格。预处理代码均由一个井号(#)开头。

二、定义常量或字符串
格式:#define 常量名 替代值
例如:#define HOURS_PER_DAY 24 #define AND &&
说明:
1、习惯将常量名全大写,单词之间用下划线隔开,方便与正常变量区分。
2、常量名和替代值中间必须有空格,而替代值后面不能加分号(;),因为在编译处理器处理#define代码时,会自动寻找空格,空格之后的被认为替代值,如果加了分号,分号本身也会被认为是替代值的一部分。
3、一个被定义的常量名并不是一个变量,它的值一旦被定义,便不能再被改变。
4、#define 声明通常位于一个文件的顶部,紧跟在#import 文件导入定义之后,同时,必须位于常量名使用之前。
三、带参数的定义—宏
例如:
#define SQUARE(x) ( (x) * (x) )
此时, y = SQUARE( V + 1) , 等价于 y = ( (v + 1) * (v + 1) )
#define CalcInterest(x, y) ( (x) * (y) )
代码即可这样书写 int result = CalcInterest(10, 5)
#define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
代码即可这样书写 self.view.backgroundColor = RGBA(100, 200, 185, 1.0);
#define Array(FIRST, …) [NSArray arrayWithObjects: FIRST, ##VA_ARGS, nil]
其中##VA_ARGS用于表示省略号所代表的所有内容,此时NSLog(@”%@”,Array(@”100”, @”200”));// 输出(100, 200)
说明: 1~4同定义常量或字符串相同。

四、带#算符或者##算符
1、#算符可产生一个C语言格式的字符串。
例如:#define string(x)#x
此时NSLog(@”%s”, string(testing)); // 输出为testing,注意,C语言格式的字符串需要用%s,不能用%@

2、##算符用来连接两段字符串
例如上面的##VA_ARGS,它可用来抓取省略号所代表的所有内容

五、定义函数
例如:#define MJCodingImplementation \
- (id)initWithCoder:(NSCoder *)decoder \
{ \
if (self = [super init]) { \
[self decode:decoder]; \
} \
return self; \
} \
\
- (void)encodeWithCoder:(NSCoder *)encoder \
{ \
[self encode:encoder]; \
}

猜你喜欢

转载自blog.csdn.net/zhongtiankai/article/details/72758264