Objective-C预处理器定义,动态C字符串到NSString声明

tad*_*man 6 c++ objective-c c-preprocessor

我正在尝试创建一个宏定义,可以根据上下文发出C++或Objective-C,但似乎无法轻松地在宏内部构建NSString.C++版本很简单,因为它使用常规字符串,但制作一个发出NSString的字符串证明是棘手的:

#define FOO(x) bar(@##x)
Run Code Online (Sandbox Code Playgroud)

预期的结果是通过前缀@:将字符串参数转换为NSString参数:

FOO("x")
// => bar(@"x")
Run Code Online (Sandbox Code Playgroud)

我得到的是一个阻止编译的错误:

Pasting formed '@"x"', an invalid preprocessing token
Run Code Online (Sandbox Code Playgroud)

Ole*_*man 5

NSString *x = @"text";
Run Code Online (Sandbox Code Playgroud)

等于:

NSString *x = CFSTR("text");
Run Code Online (Sandbox Code Playgroud)

PS NSString*和CFStringRef和__CFString*以及NSCFStringRef都是一样的:免费桥接类型

  • @tadman您可以将`CFSTR`转换为`NSString*`,它是[免费桥接](https://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFDesignConcepts/Articles/tollFreeBridgedTypes.html #// apple_ref/DOC/UID/TP40010677). (3认同)
  • 有效的定义:`#define AS_NSSTRING(x)((NSString*)CFSTR(x))` (2认同)