我刚刚创建了一个Xcode项目并编写了以下代码:
#define foo(x) x
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
int n = 666;
NSString* string = foo([NSString stringWithFormat: @"%d", n]);
NSLog (@"string is %@", string);
[self.window makeKeyAndVisible];
return YES;
}
当我尝试运行它时,我得到了一堆错误,因为预处理器决定stringWithFormat之后的逗号:应该分隔两个宏参数,因此我使用了foo和两个参数而不是正确的参数
所以当我想在我的宏内部的语句中使用逗号时,我该怎么办?
This C++ question建议在逗号周围放置一些圆形的parens(),这显然导致预处理器意识到逗号不是宏参数分隔符。但在我的头脑中,我并没有想到在目标C中这样做的方法。
答案 0 :(得分:5)
在通话中添加额外的括号:
NSString* string = foo(([NSString stringWithFormat:@"%d",n]));
答案 1 :(得分:0)
将它分开可行,但可能有一种更简单的方式
NSString* stringBefore = [NSString stringWithFormat:@"%d",n];
NSString* string = foo(stringBefore);
答案 2 :(得分:0)
尝试NSString * string = foo([NSString stringWithFormat:(@“%d”,n)]);
否则,请尝试卡特的方法,它的工作正常。