objective-c – 如何使可以采用字符串的宏?

objective-c – 如何使可以采用字符串的宏?,第1张

概述我正在努力做一些非常简单的事情:一个需要一个字符串并将其打印到NSLog的宏。 喜欢这个: #define PRINTTHIS(text) \ NSLog(@"text"); 但是,当我尝试传递一个字符串到这个家伙,我最终得到“文本”打印到控制台。在宏中的字符串级别是否都不会替换所有变量?如何做到这一点? 您将需要使用预处理器的’stringizing’运算符#,并且可能使用’token 我正在努力做一些非常简单的事情:一个需要一个字符串并将其打印到NSLog的宏。

喜欢这个:

#define PRINTTHIS(text) \    NSLog(@"text");

但是,当我尝试传递一个字符串到这个家伙,我最终得到“文本”打印到控制台。在宏中的字符串级别是否都不会替换所有变量?如何做到这一点?

解决方法 您将需要使用预处理器的’stringizing’运算符#,并且可能使用’token pasteing’运算符’##’:

#define STRINGIFY2( x) #x#define STRINGIFY(x) STRINGIFY2(x)#define PASTE2( a,b) a##b#define PASTE( a,b) PASTE2( a,b)#define PRINTTHIS(text) \    NSLog(PASTE( @,STRINGIFY(text)));

我不知道Objective-C是否需要’@’在它和开头的引号之间没有空格 – 如果允许空格,则删除PASTE() *** 作。

请注意,对于STRINGIFY()和PASTE(),您需要愚蠢的2级间接功能才能正常使用宏参数。除非你做一些非常不寻常的事情(你不想扩展宏参数),否则它几乎从不伤害,所以以这种方式使用这些 *** 作符是非常标准的。

总结

以上是内存溢出为你收集整理的objective-c – 如何使可以采用字符串的宏?全部内容,希望文章能够帮你解决objective-c – 如何使可以采用字符串的宏?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1036606.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存