2

我正在尝试制作类似于此的功能:

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

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

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

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

我试图弄清楚(...)的局部变量是什么?(是的,那三个点)

4

1 回答 1

9

它与 C 可变参数函数完全相同。这意味着你不能直接通过它,你必须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];
}
于 2013-04-25T22:53:09.657 回答