__VA_ARGS__运行时等效?

时间:2013-04-25 22:49:12

标签: objective-c xcode equivalent variadic-functions

我正在尝试创建一个类似于此的函数:

#define printf_copy(s, ...)  printf(s, ##__VA_ARGS__)  // acceptable!

但这是一个预处理器,我需要一个运行时,如下所示:

+ (NSString *)format:(NSString *)first, ...
{
    return [NSString stringWithFormat:first, __VA_ARGS__]; // unacceptable!
}

BUT !!这是编译器无法接受的!

我正在试图找出(...)的局部变量是什么? (是的那3个点)

1 个答案:

答案 0 :(得分:9)

与C variadic函数完全相同。这意味着您无法直接传递它,您必须传递va_list。你需要这样的东西:

+ (NSString *)format:(NSString *)first, ...
{
    NSString *string;
    va_list args;

    va_start(args, first);
    string = [[NSString alloc] initWithFormat:first arguments:args];
    va_end(args);

    return [string autorelease];
}