Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 被误解为宏参数分隔符的宏内语句中的逗号_Iphone_Objective C_Macros - Fatal编程技术网

Iphone 被误解为宏参数分隔符的宏内语句中的逗号

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 (@

我刚刚创建了一个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,而不是正确的参数

所以,当我想在宏中的语句中使用逗号时,我能做什么


建议在逗号周围放置一些圆括号(),这显然会使预处理器意识到逗号不是宏参数分隔符。但在我脑海中,我没有想到在目标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)可能会起作用。