【问题标题】:De-duplication of NSString & unichar constantsNSString 和 unichar 常量的重复数据删除
【发布时间】:2013-08-19 17:56:55
【问题描述】:

我有两个简单的常量:

  1. NSString
  2. unichar,

定义如下:

static NSString * const string = @"\u2022";
static unichar const character = 0x2022;

我希望将数字 0x2022 定义在一个地方。

我尝试了很多组合(###,还有CFSTR 宏),但没有成功。

可以吗?

【问题讨论】:

  • “提取字符”是什么意思?
  • @RamyAlZuhouri 我简化了文本。希望它更清楚。

标签: c++ objective-c c unicode c-preprocessor


【解决方案1】:

(借鉴How to concatenate twice with the C preprocessor and expand a macro as in "arg ## _ ## MACRO"?的想法):

#define STRINGIFY(_x_) #_x_

#define UNICHAR_FROM_HEXCODE1(_c_) 0x ## _c_
#define UNICHAR_FROM_HEXCODE(_c_) UNICHAR_FROM_HEXCODE1(_c_)

#define NSSTRING_FROM_HEXCODE1(_c_) @"" STRINGIFY(\u ## _c_)
#define NSSTRING_FROM_HEXCODE(_c_) NSSTRING_FROM_HEXCODE1(_c_)

#define MYCHARCODE 2022
static unichar const character = UNICHAR_FROM_HEXCODE(MYCHARCODE);
static NSString * const string = NSSTRING_FROM_HEXCODE(MYCHARCODE);

预处理输出:

static unichar const character = 0x2022;
static NSString * const string = @"" "\u2022";

(注意@"" "\u2022"等价于@"\u2022"。)

【讨论】:

  • 这行得通。但是它会产生一个警告: \u used with no following hex digits;将第 4 个 #define 视为 '\' 后跟标识符
  • 好吧,我想通了。只需为那一行推送ignored -Wunicode。谢啦!公认。完美。
猜你喜欢
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2012-12-29
相关资源
最近更新 更多