【发布时间】:2014-07-18 15:22:41
【问题描述】:
给定#define LOG_OBJECT(object) (NSLog(@"" #object @" %@ %@:%d”, [object description], [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__)); 语句LOG_OBJECT(self); 将产生:
2014-07-18 17:43:30.041 FrogCamera[12484:2144843] 自我 ViewController.m:20
我想了解预处理器代码的工作原理。如何查看预处理器产生的语句?
具体来说:
- 为什么整个#define 语句都包含在
( )中? -
#object是提供的任何值的文本替换吗? - 为什么在
#object之前需要@""? - 即
@“” #object @“ %@ %@:%d”如何转化为@"self %@ %@:%d"?
这是一个用法示例:
@interface ViewController ()
#define LOG_OBJECT(object) (NSLog(@"" #object @" %@ %@:%d", [object description], [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__));
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
LOG_OBJECT(self);
// = 2014-07-18 17:48:19.439 FrogCamera[12597:2151087] self <ViewController: 0x79755000> ViewController.m:20
(NSLog(@"self %@ %@:%d", [self description], [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__));
// = 2014-07-18 17:48:19.440 FrogCamera[12597:2151087] self <ViewController: 0x79755000> ViewController.m:21
}
@end
请参阅GlobalUtilities.h 了解 LOG_OBJECT 语句的来源。
【问题讨论】:
-
基于 C, 2.
#是一个运算符。 4. 连接相邻的字符串字面量。
标签: objective-c c-preprocessor stringification