一个关于宏定义的问题(Objective-C)

代码如下:

#define NOTIFICATION_NAME @"TestNotification"

#import "ViewController.h"

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    if (NO) {
        NSLog(@"--------------");
#define NOTIFICATION_NAME @"TestNotification222"
    }
    NSLog(@"输出的值为  %@", NOTIFICATION_NAME);

}

上面代码输出的值会是多少呢?根据代码的逻辑输出的值应该为“TestNotification”,但在运行后发现输出的值为“TestNotification222”

惊不惊喜,意不意外 (* ̄︶ ̄)

以下宏的几个特点:

  • 宏替换只作替换,不做计算,不做表达式求解;
  • 函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存;
  • 宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值);
  • 使用条件编译可以使目标程序变小,运行时间变短;
  • 预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查。

参考:C/C++宏的用法

猜你喜欢

转载自www.cnblogs.com/GoodmorningMr/p/9668853.html
今日推荐