iOS中宏定义相关

宏定义

#define 宏名 值

例如:

#define PI 3.1415926 

注意:要是宏定义的值中有+-一定要用括号括起来,防止在代码上下文中出现运算优先级错误

#define A 3+2
A*2 等价于 3+2*2
实际我们想要的是 (3+2)*2
所以宏定义要这样写
#define A (3+2)

宏定义函数

我们可以给宏添加参数

#define 宏名(参数1,参数2...)  值(参数1,参数2...)

例如:
这是格式化打印字符串的宏定义打印函数

#define NSLOG_Str(mark,str) NSLog(@"##%@##--str:%@--",(mark),(str))
  • 换行

如果我们的函数很长需要换行的话可以这样写:

#define NSLOG_Str(mark,str)\
if (str) {\
    NSLog(@"##%@##--str:%@--",(mark),(str));\
}

\为了屏蔽换行符,从而起到换行作用

  • 字符串转换
#define NSLOG_IF_Condition(Condition)\
if (Condition){\
    fprintf(stderr, "提示:" #Condition "条件成立\n");\
}

调用:
int a = 0;
NSLOG_IF_Condition(a==0);

被解析为
if (a==0){
    fprintf(stderr, "提示:" "a==0" "条件成立\n");
}

#Condition是字符串化操作

取消宏定义

#undef 宏名

例如:

#undef PI

补充

今天早晨上班的路上看了一篇关于错误使用宏定义的博文,在这里补充一下。

#define B @"60"
if (false) {
    #define B @"80"
}
NSLog(B);

看起来#define B @"80"这句代码永远都不会执行,但是预处理命令和常量是不同的,在编译时期编译器会编译这段代码,这个时候编译器就会将B替换成@"80",所以最后的输出结果是80。

版权声明:出自MajorLMJ技术博客的原创作品 ,转载时必须注明出处及相应链接!

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

推荐阅读更多精彩内容

  • C中的预编译宏定义 2009-02-10 作者: infobillows 来源:网络 在将一个C源程序转换为可执行...
    白水灬煮一切阅读 1,641评论 0 5
  • http://www.open-open.com/lib/view/open1390651437117.html ...
    Xtuphe阅读 1,293评论 0 10
  • 宏定义在C系开发中可以说占有举足轻重的作用。底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可...
    你好自己阅读 1,061评论 0 5
  • 目录 一.预处理的工作方式... 3 1.1.预处理的功能... 3 1.2预处理的工作方式... 3 二.预处理...
    朱森阅读 1,432评论 0 2
  • 想来时间是不等人的,小时候的我一直盼着长大,长大之后一直希望自己18岁。如今看来,自己依旧孑然一身,从毕业到现在,...
    一个人的CD阅读 269评论 0 1