• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Objective-C中#define的常见用法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

参考博客

http://blog.csdn.net/kindazrael/article/details/8108868

在C语言中,预处理代码是非常强大的工具,能让代码变得可读性和可维护性更强。预处理代码在代码编译之前被提前处理,预处理代码均由#打头。

1.#define基础应用——声明常量

格式:#define 常量名 代替值

#define声明主要用于将常量赋予有意义的名字,例如,声明表示一周天数的常量:

#define DAYS_WEEK 7
#define PI 3.1415

需要注意的几点:

* #define命令之后是常量名,再之后是代替值,之间用空格分隔,末尾没有分号。

* 通常情况下,习惯将预处理的常量名全大写,单词之间用下划线隔开(与正常变量区分)。这样做的原因是在编译器处理这段 #define 代码时,会自动寻找空格,空格之后的被认为是代替值。这也是为什么在每一行代码的末尾不用加分号的原因,因为如果加了分号,分号本身也会被认为是代替值的一部分。

* 一个被定义的常量名并不是一个变量;它的值一旦被定义,便不能再被改变。

#define 声明必须位于常量名使用之前(不像方法 (method) 可以放在文件中任意位置),一般位于本文件的顶部。

2.高级用法

* 若之前曾定义过 π,我们同样可以在定义中使用定义后的常量名来指代,例如:

#define TWO_PI 2.0 * PI

* 还可以利用预处理定义 Objective-C 代码中任意一段字符或字符串,例如:

#define AND &&
#define OR ||
#define EQUALS ==
if (y EQUALS 0 OR y EQUALS 1) // …
合理地利用 #define,可增强代码的可读性。对比下列两行代码
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
// 或
#define IS_LEAP_YEAR (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)
if (IS_LEAP_YEAR) // 代码可读性更强。

* 一个定义通常应在一行代码中完成。但如果你需要手动空行,那么在每行后输入一个后划线(\)即可将几行代码连接起来成为一行。例如:

#define IS_LEAP_YEAR(y) (y % 4 == 0 && y % 100 != 0) \
|| (y % 400 == 0)
if ( IS_LEAP_YEAR(currentYear) )

3.宏

#define 声明中还可以使用参数,并且可使用多个参数;这一特性被称为“宏”。

* 一个参数:

例如:

#define SQUARE(x) ( (x) * (x) )

此时, y = SQUARE(v + 1); 等价于 y = ( (v + 1) * (v + 1) );

* 两个参数:

#define CalcInterest(x,y) ( x * y )

代码中便可书写:

int earnings = CalcInterest(10,5));

* 多个参数:

#define Array(FIRST, ...) [NSArray arrayWithObjects: FIRST, ##__VA_ARGS__, nil]

 4.#算符以及##算符

* #算符可生成一个C语言格式的字符串,如:

#define string(x) #x 

则 string(testing) == "testing"

* ##算符用来谅解两段字符串。假设你有一组变量,x1 到 x100。如果你想打印其中某一个变量的值。你可以这样定义:

#define printxvar(n) printf("%i\n", x ## n)printxvar(20); 在编译时将被识别为 printf(“%i\n”, x20);。这样只需要输入 printxvar(n);便可以打印出 xn 的值。

 

 

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
转载:iPhone/Mac Objective-C内存管理教程和原理剖析发布时间:2022-07-12
下一篇:
Objective-C 学习笔记 - part 12 - 多线程发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap