在Objective C中字符串化宏值?

时间:2011-12-06 02:13:29

标签: ios objective-c xcode macros c-preprocessor

我正在使用XCode 4.2进行开发,并想知道如何对宏参数进行字符串化?我试图使用#,因为我认为我会在 C 中使用,但无济于事。这是我的宏:

#define ASSIGN_PROPERTY(PROP_NAME, PROP_NAME_PARAM) { \
  if (PROP_NAME_PARAM == nil) { \
    NSAssert(PROP_NAME != nil, @"#PROP_NAME is already nil"); \
    PROP_NAME = nil; \
  } else { \
    NSAssert1(PROP_NAME == nil, @"#PROP_NAME is already set, address=%p", PROP_NAME); \
    PROP_NAME = PROP_NAME_PARAM; \
  } \
}

然后在一个以foo为属性的类中,我像这样定义它的setter:

- (void) setFoo:(NSObject *)fooParam {
  ASSIGN_PROPERTY(foo, fooParam)
}

假设客户端使用非零值调用setFoo,但foo属性已经非零。我想要打印宏:

  

foo已设置,地址= 0x5e55400

但它正在印刷:

  

#PROP_NAME已设置,地址= 0x5e55400

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

你有没有试过像

这样的东西
NSAssert(PROP_NAME != nil, @"%s is already nil", #PROP_NAME);