IOS基础之宏定义

宏定义#define:
定义和使用同C

/ :表示换行
# :字符串操作符,用于将参数序列化成一个字符串;
## :连接符,用于将相邻的两个标记(Token)连接为一个。使用是分隔(根据空格或其他操作分隔符[+,-,*,/,”,”等]),再强制连接(去掉和前面的字符串间的空格,再连接起来)。
@# :字符化操作符,只能用于有参数传入的宏定义中,必须置于宏定义体参数名前,作用是将传入的单字符参数名转换成字符,以一对单引号括起来。
可变参数宏:#define DBGMSG(format, ...) fprintf (stderr, format, __VA_ARGS__)
… 表示一个可变化的参数表,变参必须放于最后一个参数;
__VA_ARGS__:参数标识符。调用时会替代函数形参里的最后一个变参;
#pragma:说明编译器信息
_Pragma:同#pragma,但功能更强大;
#warning:显示编译警告信息
#error:显示编译错误信息
#line:标志该语言的行号
【可变参数宏不被ANSI/ISO C++所支持,iOS支持】

C语言中预定义宏:
__FILE__ :当前源代码的文件名(字符串)
__LINE__:当前源代码中的行号(整型)
__DATE__:进行预处理的日期(”Mmm dd yyyy”形式的字符串)
__TIME__:源文件编译时间(格式“hh:mm:ss”)
__FUNCTION__:同__func__(但IDE不支持),当前源代码的函数名
__PRETTY_FUNCTION__:同__FUNCITON__,但在g++下会输类名、函数名及其他函数信息
例:

#ifdef __OBJC__ //表示下面定义的宏内容只被使用Oc语言的文件所引用 
#ifdef DEBUG
//debug环境,在调用NSLog后,自动将参数拼接后再使用系统的NSLog打印
#define NSLog(str, ...)  NSLog(@"%s(%d): " str, __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
#define NSLog(...) {}//正式环境,调用到NSLog后,不做操作
#endif
#define BLOCK_EXEC(block, ...) if (block) { block(__VA_ARGS__); };
//在执行block前判空,若一个空的block执行,会出现EXEC_BAD_ACCESS异常

宏定义(define)与常量(const)的使用:

宏定义:#define NAME @“fansion” //只在预处理里做文本替换,没有类型,不做类型检查。大量使用宏会导致二进制文件变大

变量:NSString *NAME = @“fansion”;//共享一块内存空间,若项目中N处用到,也不会分配N块内存空间,可被修改,在编译阶段会检查类型

常量:(四种方式)\共享一块内存空间

局部常量:static const NSString *NAME = @“fansion”;//用static修饰后外部不能访问

全局常量:不管在哪个文件夹,外部都能访问;
const NSString *NAME = @“fansion”;//*NAME不能被修改,NAME可以
NSString const *NAME = @“fansion”;//*NAME不能被修改,NAME可以
NSString *const NAME = @“fansion”;//*NAME能被修改,NAME不可以
const位置不同,代表的意义不同;const只修饰右边的内容,即右边的内容不能被修改。

【可认为*是一个分界,把一个声明从右向左读。如:const char *p即:p is a pointer to a const char(常量字符);char * const p即:p is a const pointer(常量指针) to a char】

博客地址:IOS基础之宏定义

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,047评论 0 13
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,014评论 0 7
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 2,043评论 0 12
  • C中的预编译宏定义 2009-02-10 作者: infobillows 来源:网络 在将一个C源程序转换为可执行...
    白水灬煮一切阅读 1,651评论 0 5
  • 隔一程山水,你,青衫依旧,打马过河山;裙裾飞扬,发梢随风乱。花海飘香,芳草葳蕤;清风瘦月,迷蝶光影。与我坐望于光阴...
    狂饮鸩迷恋阅读 625评论 0 0