正确的使用预编译宏DEBUG

正确的使用预编译宏DEBUG,它包括三个问题:

第一个问题,定义成什么?

先看DEBUG=1,DEBUG=YES,DEBUG=true,这个三个意义是一样吗?如果DEBUG宏分别定义成1、YES、true,以下代码都能输出“Hello, World”吗?

#ifdef DEBUG
        NSLog(@"Hello, World! 1");
#endif
        
#if DEBUG
        NSLog(@"Hello, World! 2");
#endif
        
        if (DEBUG) {
            NSLog(@"Hello, World! 3");
        }

DEBUG=1,则1、2、3都能输出,

DEBUG=YES,则1、3能输出,2 却不能输出

DEBUG=true,则1、2、3都能输出,

YES是Objective-C语言中的BOOL值,在预编译中无法代表“真”的意思,1和true可以在预编译中代表“真”。

所以第一个问题的答案是DEBUG应该定义为是1或者true,系统默认是1。

从上面的代码的结果也引出第二个问题,如何使用DEBUG宏?

#if DEBUG 、 #ifdef DEBUG、 if (DEBUG) ,这个三种写法哪种更OK呢?

我的答案是#if DEBUG 是最好的实践,它相当于#if defined(DEBUG) && DEBUG,而#ifdef DEBUG只要定义了DEBUG就执行,不管DEBUG定义的值什么,而 if (DEBUG)在没有定义DEBUG的情况会编译不过。

第三个问题,在哪些Configuration下定义,工程默认有Debug和Release两种Configuration,那么最好的实践是在需要的Configuration中加入DEBUG宏,比如在Debug中加入DEBUG=1,千万不要在不需要的Configuration下加入,比如在Release中加入DEBUG=0就是画蛇添足了,因为代码中可能使用#ifdef DEBUG,那Release中不管DEBUG是1还是0,都会编译本来不该执行的代码。

最后,其它预编译宏的正确使用方法可以参考DEBUG宏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值