OC中的宏 和 C中的预编译宏定义

本文详细介绍了OC和C语言中的宏定义,包括如何检查设备类型、定义常量、创建预处理条件以及单例模式等。通过实例展示了宏定义在代码中的实际应用,如字符串化操作符#和连接符##,并讲解了条件编译的用法,以及预处理命令的作用和使用场景。
摘要由CSDN通过智能技术生成

1、先来几个常用的:

[csharp]  view plain   copy
  1. // 是否高清屏  
  2. #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)  
  3. // 是否模拟器  
  4. #define isSimulator (NSNotFound != [[[UIDevice currentDevice] model] rangeOfString:@"Simulator"].location)  
  5. // 是否iPad  
  6. #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)  
  7. // 是否iPad  
  8. #define someThing (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)? ipad: iphone  

2、基本的使用:

[html]  view plain   copy
  1. //定义π值 3.1415926    
  2. #define PI 3.1415926     
  3. //则在程序用可以如下使用       
  4. double i=2*PI*3;     
  5. //效果相当于  double i=2*3.1415926*3;    
  6.   
  7. //预处理命令可以定义任何符合格式的形式,例如判断年份是否闰年  
  8. #define  IS_LEAP_YEAR  year%4==0&&year%100!=0||year%400==0    
  9. //使用时则可以直接    
  10. if(IS_LEAP_YEAR)    
  11.    
  12. //或者可以定义一个参数      
  13. #define  IS_LEAP_YEAR(y)  y%4==0&&y%100!=0||y%400==0    
  14. //使用时则可以直接     
  15. int ys=2012;     
  16. if(IS_LEAP_YEAR(ys))       
  17.     
  18. //通常预处理程序定义在一行 如果好分行 比如说太长需要换行  需要使用“/”符号 表示还有下一行,多行分列也是如此,例:    
  19. #Define  IS_LEAP_YEAR  year%4==0&&year%100!=0/    
  20.            ||year%400==0     
  21. //宏定义参数后边放一个# 那么在调用该宏时,预处理程序将根据宏参数创建C风格的常量字符串 例:    
  22. #define STR(x) # x    
  23. //将会使得 随后调用的      
  24.   
  25. NSLOG(STR(Programming in Objective-c./n));    
  26. //显示结果为 Programming in Objective-c./n  

3、关于#与##的操作符:

<1>.宏定义中字符串化操作符#:
#的功能是将其后面的宏参数进行字符串化操作,意思就是对它所应用的宏变量通过替换后在其左右各加上一个双引号。例如

[csharp]  view plain   copy
  1. #define WARN_IF(EXPR)\  
  2. do {\  
  3. if (EXPR)\  
  4. fprintf(stderr, "Warning: " #EXPR "\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值