我创建了一个自定义日志记录类,该类将某些内容记录到文件中。我正在尝试制作一个宏,以便可以像NSLog()一样使用我的自定义类,但是它似乎无法正常工作。

这是我定义宏的方式:

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


logText:的声明如下:

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


如果我仅传递一个参数,则效果很好。像这样:

ECLog(@"test");


但是,如果我传递另一个参数,像这样:

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


我得到一个错误,它只期望一个参数。

有任何想法吗?

最佳答案

不,警告与方法调用有关。该错误似乎与宏有关,因为在预处理器处理宏之前您正在查看代码,但编译器指向同一行,即后处理。

您已将此方法声明为采用一个参数,但您传递的不止于此。

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


由预处理器重写为:

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


那就是现在传递给编译器的文字文本,就像您自己以这种方式键入它一样。该方法声明为采用单个NSString,但是您将其传递了两点。您需要更改方法的声明:

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

10-08 15:44