Вася аргументы во время выполнения эквиваленте?


Я пытаюсь сделать функцию, подобную этой:

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

Но это препроцессор, мне он нужен для выполнения, вот так:

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

Но!! это неприемлемо для компилятора!

Я пытаюсь понять, для чего нужна локальная переменная (...)? (да эти 3 точки)

1 2

1 ответ:

Это точно так же, как и с вариадическими функциями 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];
}