【发布时间】:2014-02-12 13:48:50
【问题描述】:
我正在学习如何使用宏,但现在对宏感到困惑。
我正在尝试创建一个 NSString 连接,它只会将每个参数附加到彼此。
例如:concatOP(@"hey",@"Jude",@"Don't") 将返回一个 NSString,其中包含:@"heyJudeDon't"
我实际上编写了一些代码(一些在这里也可以找到)来获取参数的数量,但我没有成功完成工作的第二部分。
#define NUMARGS(...) ( sizeof((int[]){__VA_ARGS__}) / sizeof(int) )
#define concatOP(...) NSMutableString *format = [[NSMutableString alloc] init];\
for( int i = 0; i < NUMARGS(__VA_ARGS__); i++){\
[format appendString:@"%@"];}\
[[NSString alloc] initWithFormat:format, __VA_ARGS__]
我实际上得到了很多错误,告诉我格式不存在或者我错过了一些“;”或其他结束标签。
【问题讨论】:
-
我不知道这是一个随意的例子还是您要解决的真正问题,但人们经常使用
NSArray方法componentsJoinedByString进行这种连接。所以NSString *result = [@[@"Hey",@"Jude",@"Don't"] componentsJoinedByString:@""];. -
为什么我得到了 -1 ? ://
-
它可能被否决了,因为提议的宏遇到了这样的基本问题(正如 Cy-4AH 的扩展所示,虽然你的意图很明确,但提议的执行没有任何意义),即使确实如此,我不确定这首先是一个非常好的宏应用程序。不过,我不确定它是否值得投反对票(它让我在可变参数宏中四处挖掘,所以我学到了一些东西)。我不会为反对票而汗流浃背。
-
这个网站的目的是帮助人们,所以也许这个问题对某些人来说似乎很容易,但当我们遇到一些关于可变参数和预处理器指令的问题时,它并不明显......很抱歉不知道一切这是我最大的错误:/ 我仍然认为我的问题仍然值得,因为我学到了一些东西,而且我确信我不是唯一的。
-
对不起,这不是给你的 ;) 谢谢你的解释 :)
标签: ios objective-c c-preprocessor variadic-macros variadic-functions