Iphone 被误解为宏参数分隔符的宏内语句中的逗号
我刚刚创建了一个Xcode项目,并编写了以下代码:Iphone 被误解为宏参数分隔符的宏内语句中的逗号,iphone,objective-c,macros,Iphone,Objective C,Macros,我刚刚创建了一个Xcode项目,并编写了以下代码: #define foo(x) x - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { int n = 666; NSString* string = foo([NSString stringWithFormat: @"%d", n]); NSLog (@
#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,而不是正确的参数
所以,当我想在宏中的语句中使用逗号时,我能做什么
建议在逗号周围放置一些圆括号(),这显然会使预处理器意识到逗号不是宏参数分隔符。但在我脑海中,我没有想到在目标C中实现这一点的方法。将其分离出来是可行的,但可能有一种更简单的方法
NSString* stringBefore = [NSString stringWithFormat:@"%d",n];
NSString* string = foo(stringBefore);
将其分离出来是可行的,但可能有一种更简单的方法
NSString* stringBefore = [NSString stringWithFormat:@"%d",n];
NSString* string = foo(stringBefore);
在调用周围添加附加括号可以起到以下作用:
NSString* string = foo(([NSString stringWithFormat:@"%d",n]));
在调用周围添加附加括号可以起到以下作用:
NSString* string = foo(([NSString stringWithFormat:@"%d",n]));
试试NSString*string=foo([NSString stringWithFormat:(@“%d”,n)])
否则,试试卡特的方法,效果很好。试试NSString*string=foo([NSString stringWithFormat:(@“%d”,n)]
否则,试试卡特的方法,效果很好。你试过附加括号了吗?不要用宏,而是用函数?如果做不到这一点,foo(x)(x)可能会起作用。你试过附加括号吗?不要使用宏,而是使用函数?否则,foo(x)(x)可能会起作用。