我创建了一个自定义日志记录类,可以将某些内容记录到文件中。我正在尝试创建一个宏,以便我可以像NSLog()
一样使用我的自定义类,但它似乎无法正常工作。
以下是我如何定义宏:
#define ECLog(fmt, ...) [ECLogger logText:fmt, ## __VA_ARGS__]
logText:
声明如下:
+ (void)logText:(NSString *)theString;
如果我只传递一个参数,它就可以了。像这样:
ECLog(@"test");
但如果我传递另一个论点,就像这样:
ECLog(@"test %@",someString);
我得到一个错误,它只期待一个参数。
有什么想法吗?
答案 0 :(得分:2)
不,警告是关于方法调用的。错误似乎与宏有关,因为您在预处理器处理之前查看代码,但编译器指向同一行,后处理。
你已经将这个方法声明为接受一个参数,但是你传递的不仅仅是那个。
ECLog(@"test %@", someString);
被预处理器重写为:
[ECLogger logText:@"test %@", someString];
这是现在传递给编译器的文字文本,就像你自己以这种方式输入它一样。该方法被声明为单个NSString
,但您传递了两件事。您需要更改方法的声明:
+ (void) logText: (NSString *)theString, ...;