美文网首页
iOS中宏定义相关

iOS中宏定义相关

作者: JerryLMJ | 来源:发表于2016-04-01 18:32 被阅读360次

宏定义

#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技术博客的原创作品 ,转载时必须注明出处及相应链接!

相关文章

  • iOS中宏定义相关

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

  • IOS NSLog宏定义

    IOS NSLog宏定义 标签(空格分隔): IOS IOS NSLog宏定义 宏定义NSLog方法,不用加";"...

  • 获取iOS系统版本,谨慎使用[[[UIDevice curren

    最近分享了iOS开发中相关的一些宏定义,其中涉及到判断iOS的版本号的宏,有简友评论这个方法不靠谱,建议我找个更好...

  • iOS_宏定义相关

    2018.4.20 定义涉及值的宏时最好加上括号。 代码地址:https://github.com/Thinker...

  • OC常用宏定义

    测试输出 Log 屏幕相关 系统相关 定义弱引用、强引用 定义警告宏 颜色宏 其他宏

  • 关于extern引出的问题

    问题 项目中在.mm文件中使用宏: 报错: 解析 iOS的常量声明与定义 iOS中声明常量 定义常量 这个是iOS...

  • 宏定义相关

    最近面试被问到将#define max(a, b)补充完整。这个知识点自己很久之前也详细了解过,要写出完美的定义会...

  • iOS 宏定义中的#

    一个 # 号 表示加双引号 显然,这个一个C字符串。 要想变成OC的字符串,还需要改进一下: 两个 ## 号 表示...

  • iOS开发 宏定义

    在iOS开发中,合理的使用宏定义可以使我们少些好多代码 C预定义宏DATE //进行预处理的日期(“Mmm dd...

  • PrefixHeader与Header文件的使用

    在iOS中,一般把定义的宏方法,宏常量放在PrefixHeader文件中,例如请求的API接口,或者获取屏幕...

网友评论

      本文标题:iOS中宏定义相关

      本文链接:https://www.haomeiwen.com/subject/sxlylttx.html