2010-05-12 2 views
15

Продолжение с последнего вопроса здесь: Log method name in Obj-C. Я просто задавался вопросом, есть ли способ распечатать имя переменной. Например:Распечатайте переменную имя цель-C

NSString *name = "vodkhang"; 
NCLog(@"%@", name); 

, и я надеюсь, что вывод должен быть:

name: vodkhang 

Просто суммировать предыдущий пост, в настоящее время, я могу распечатать имя класса, имя метода и номер строки при Я называю

NCLog(@"Hello World"); 
<ApplicationDelegate:applicationDidFinishLaunching:10>Hello world 

с

#define NCLog(s, ...) NSLog(@"<%@:%d> %@", __FUNCTION__, __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__]) 

ответ

35
#define logIntVariable(x) NSLog(@"Value of %s = %d",#x, x) 


- (void) myRoutine { 
    int intValue = 5; 

    logIntVariable(intValue); 
} 
+12

Общий принцип заключается в том, что когда вы помещаете '#' перед аргументом в тело '# define', препроцессор заменяет его строкой C выражения * exact *, переданного макросу. Когда вы передадите имя переменной, вы получите это имя. Если вы передадите выражение, оно воспроизведет выражение полностью, а не результат вычисления. –

+0

@Quinn: Я понял. Спасибо за это – vodkhang

Смежные вопросы