Вася аргументы во время выполнения эквиваленте?
Я пытаюсь сделать функцию, подобную этой:
#define printf_copy(s, ...) printf(s, ##__VA_ARGS__) // acceptable!
Но это препроцессор, мне он нужен для выполнения, вот так:
+ (NSString *)format:(NSString *)first, ...
{
return [NSString stringWithFormat:first, __VA_ARGS__]; // unacceptable!
}
Но!! это неприемлемо для компилятора!
Я пытаюсь понять, для чего нужна локальная переменная (...)? (да эти 3 точки)
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]; }