Пользовательский макрос регистрации не принимает несколько аргументов - PullRequest
0 голосов
/ 21 марта 2012

Я создал собственный класс регистрации, который записывает определенные вещи в файл. Я пытаюсь создать макрос, чтобы я мог использовать свой собственный класс, например NSLog(), но он, похоже, работает неправильно.

Вот как я определяю макрос:

#define ECLog(fmt, ...) [ECLogger logText:fmt, ## __VA_ARGS__]

logText: объявлено так:

+ (void)logText:(NSString *)theString;

Если я передаю только один аргумент, он работает нормально. Как это:

ECLog(@"test");

Но если я передам другой аргумент, например:

ECLog(@"test %@",someString);

Я получаю сообщение об ошибке, что ожидался только один аргумент.

Есть идеи?

1 Ответ

2 голосов
/ 21 марта 2012

Нет, предупреждение касается вызова метода. Похоже, ошибка связана с макросом, потому что вы просматриваете код до того, как препроцессор с ним поработал, но компилятор указывает на ту же строку, постобработку.

Вы объявили, что этот метод принимает один аргумент, но вы передаете его больше, чем это.

ECLog(@"test %@", someString);

переписывается препроцессором в:

[ECLogger logText:@"test %@", someString];

Это буквальный текст, который теперь передается компилятору, как если бы вы печатали его таким образом. Метод объявлен как принимающий один NSString, но вы передаете ему две вещи. Вам нужно изменить объявление метода:

+ (void) logText: (NSString *)theString, ...; 
...