代码如下:
#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++宏的用法