C宏,它创建一个NSString变量,变量名称作为字符串的内容

Bes*_*esi 7 objective-c ios c-preprocessor

尽管这不是一个好的编码实践,但我想要一个应该如下工作的宏:

CREATE_STRING(fooBar)
Run Code Online (Sandbox Code Playgroud)

它应该创建以下代码:

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

我的宏看起来像这样:

#define CREATE_STRING(varName) NSString *varName = @"varName";
Run Code Online (Sandbox Code Playgroud)

但现在我得到以下内容

NSString *fooBar = @"varName";
Run Code Online (Sandbox Code Playgroud)

这似乎是一个容易解决的问题,我已经检查过IBM的文档,但我似乎无法varName进入字符串.

小智 14

使用

#define CREATE_STRING(varName) NSString *varName = @#varName
Run Code Online (Sandbox Code Playgroud)

代替.(另请注意,您不需要使用尾随分号,以便能够将您的宏"调用"为类似C的函数.)

  • +1我刚刚测试了这个答案,它非常好.在我尝试之前,我认为`@#varName`会出现语法错误. (3认同)

Jer*_*myP 10

这是怎么做的

#define CREATE_STRING(varName) NSString *varName = @"" #varName
Run Code Online (Sandbox Code Playgroud)

它利用了两个字符串常量一个接一个地被编译器连接起来的事实.

  • @trojanfoe @ H2CO3当我发布我的答案时,我不相信直接的`@#varName`会起作用,因为在过去的日子里它没有.但是,我刚刚使用当前的clang编译器进行了尝试,现在确实如此.顺便说一下,不是我对H2CO3的回答进行了贬低.我总是在投票时发表评论. (3认同)
  • ANYBODY在downvoting之前是否真的尝试过我的解决方案? (2认同)