美文网首页
ios - 宏定义在计算时的那些坑

ios - 宏定义在计算时的那些坑

作者: ShIwEn9 | 来源:发表于2019-03-12 12:06 被阅读0次

    前言

    因为宏定义的快捷和方便性,所以在开发日常的中我们时常会用到宏定义
    我喜欢用到了大量的宏包括定义接口,尺寸,常用方法的替代。
    用的时候是很爽歪歪,可是常在河边走哪有不湿鞋的道理。🤪

    昨天在优化一个项目中,我定义了一个宏

    如图:我在定义一个kNewHeaderHeight的时候用到了加法运算
    之后我是想得到一个控件的高度,通过屏幕的高度减去kNewHeaderHeight

    mainScrollView.frame = CGRectMake(0,kNewHeaderHeight , kScreenWidth, kScreenHeight - kTabBarHeight - kNewHeaderHeight);
    

    结果高度总是不对。。。。。
    打印了一下各个值

    NSLog(@"kTabBarHeight = %f",kTabBarHeight) ;
    NSLog(@"kScreenHeight = %f",kScreenHeight ) ;
    NSLog(@"kScreenHeight - kTabBarHeight - kNewHeaderHeight = %f",kScreenHeight - kTabBarHeight - kNewHeaderHeight) ;
    
    结果的更加的诡异。。。。。

    可以看到这里我们单独打印每一个值的时候都没有问题,但是只要把他们放在一起去运算就会出现问题,相减的话理论上会得到的高度是577 但是结果却是669 。。。。!!!

    真的是见了鬼了! !!

    其实,宏定义实际上就是保存了一段代码(运算)当进行运算的时候宏就会原封不动的将代码放大算是中
    例如上面的例子

    kNewHeaderHeight = kHeaderHeight + 80 * kScreenWidth720

    将kNewHeaderHeight放到减肥运算中就会出现问题其中的“ + ” 会变成 “ - ”
    自然计算的结果就会不一样 kScreenHeight - kTabBarHeight - kHeaderHeight - 80 * kScreenWidth720

    解决方法:

    其实很简单,既然➕变成了➖ 那么我们只需要在定义kNewHeaderHeight加一个 ()就好了 自然➕就不会变了。。。。

    如图:这样计算的结果就不会变啦。。。。。。。。。

    菜鸟果然是菜鸟,还是认真学习的好,加油⛽️

    相关文章

      网友评论

          本文标题:ios - 宏定义在计算时的那些坑

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