iOS: #define

125 篇文章 1 订阅

typedef与#define的区别。

http://www.sf.org.cn/article/base/200608/18988.html


#define 是宏定义,所谓的宏定义,就是将某段代码、地址、字符串等一串的文字,用一个宏来代替。#define是一种预处理。

#define与typedef功能类似,但它除了定义数据类型外,还可以定义给变量、语句等等定义,还可以包含参数。#define的原理是文本替换

#define INTEGER int
//把int定义成INTEGER
#define PRINTNUM(i) NSLog(@"%d",i)
//把后面的输出语句定义成带参数的PRINTNUM
int main (int argc, const char * argv[])
{
 
    @autoreleasepool {
        INTEGER i=5;
        NSLog(@"%d",i);
 
        PRINTNUM(555);
 
 
    }
    return 0;
}

#define最常见的用法是定义常量

#define MAX_VOLUME 11 

#define kDatabaseName @"database.sqlite3"


经常采用的一种做法是,把#define放置到一个头文件中,然后,将其包含到各种源文件中。这样,就可以通过在头文件中更改单个的值,从而改变该常量在所有源文件中的值。传统的C对于定义常量所使用的命名惯例是,使用全部大写字母。传统的Apple命名惯例是以一个k开始常量名称,剩下的名称使用CamelCase法命名:

#define kMaximumVolume 11 

#define kUrl @"http://google.com" 



Say again,#define的原理是文本替换。#define定义时并不会真正去执行它所代表的东东,而是当真正在用到这个define的值时,会进行文本替换然后才执行

例1,

#define PIETWO 3.14159*2

上面预定义了一个PIETWO,其代表3.14159*2,但并不是它已经执行了3.14159*2这个运算。而是当你使用这个PIETWO时,

float x = PIETWO * 10

这时就会用 3.14159*2 来替换PIETWO,然后才来进行运算。

例2 在AppDelegate.m里定义了

#define ApplicationDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)

这并不表示“执行了 ((AppDelegate *)[UIApplication sharedApplication].delegate) 然后把这段代码的返回值赋给ApplicationDelegate",而是表示”ApplicationDelegate这个变量就代表 ((AppDelegate *)[UIApplication sharedApplication].delegate) 这段代码,当用到ApplicationDelegate这个变量时,就用这段代码来ApplicationDelegate并执行。
如在你的viewcontroller.m
import "AppDelegate.h"
....
ApplicationDelegate.isLogin=YES;


由于#define实际上是作为文本替换,它甚至可以用来定义运算符
#define EQUALS ==
使用时为
if(value1 EQUALS value2)






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值