#define 用法解析
在开发中,会经常遇到申明全局变量的问题,而在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]; \
}
#define 用法解析相关推荐
- extern c用法解析
extern "c"用法解析 字数1875 阅读38631 评论4 喜欢20 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟 ...
- extern C的用法解析
extern "C"的用法解析 2012-03-20 23:29 by Rollen Holt, 20231 阅读, 6 评论, 收藏, 编辑 1.引言 C++语言的创建初衷是&q ...
- scipy.optimize.curve_fit函数用法解析
scipy.optimize.curve_fit函数用法解析 转:https://zhuanlan.zhihu.com/p/144353126 optimize.curve_fit()函数,用于日常数 ...
- 四种Java线程池用法解析
四种Java线程池用法解析 本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 ...
- #define 用法
#define用法 收藏 1.简单的define定义 #define MAXTIME 1000 一个简单的MAXTIME就定义好了,它代表1000,如果在程序里面写 if(i<MAXTIME){ ...
- mysql have_mysql having用法解析
having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前.而 having子句在聚合后对组记录进行筛选. ...
- argparse.ArgumentParser()用法解析
argparse.ArgumentParser()用法解析(https://blog.csdn.net/the_time_runner/article/details/97941409) https: ...
- sql中group by 和having 用法解析
--sql中的group by 用法解析: -- Group By语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)". --它的作用是通过一定的规则将一 ...
- C:#define用法
#define用法 C语言中,可以用 #define 定义一个标识符来表示一个常量. 其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译不是编译 ...
最新文章
- GitHub开源的AI下五子棋(基于博弈树极大极小值alpha-beta剪枝搜索)
- 如何让vue项目打包出来之后更加小巧?
- C++编程练习(5)----“实现简单的循环队列的顺序存储结构“
- AtomicIntegerArray和AtomicIntegerFieldUpdater
- java实现关键词云_Java synchronized 关键词详细说明
- 《C++ Primer》第一章的 Sales_item.h头文件源码
- springmvc 1
- 接口向mapper传参数
- 2018-2019-2 20165234 《网络对抗技术》 Exp2 后门原理与实践
- maven中常遇到的一些错误
- python-31:然而我发现结果并不是我想要的
- 不透水面提取操作实现
- 【TSP】基于matlab GUI蚁群算法求解旅行商问题【含Matlab源码 929期】
- 推荐几个Linux镜像下载网站
- 【BAT】win10 命令行工具cmd乱码解决方案及cmd非常用命令chcp介绍
- 条码软件如何将标签文件输出为PDF文档
- js判断上传文件为图片格式、excel格式
- 一个三非渣本的安卓秋招之路
- Windows 2016 服务器安全配置和加固
- 在Vmware14中安装Linux系统教程(图文教程)