__VA_ARGS__运行时等效?

2 xcode objective-c variadic-functions equivalent

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

#define printf_copy(s, ...)  printf(s, ##__VA_ARGS__)  // acceptable!
Run Code Online (Sandbox Code Playgroud)

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

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

但!!编译器这是不可接受的!

我想弄清楚(...)的局部变量是什么?(是的那3个点)

Car*_*rum 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];
}
Run Code Online (Sandbox Code Playgroud)