自定义日志记录宏不接受多个参数

时间:2012-03-21 01:37:55

标签: objective-c macos cocoa macros c-preprocessor

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

以下是我如何定义宏:

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

logText:声明如下:

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

如果我只传递一个参数,它就可以了。像这样:

ECLog(@"test");

但如果我传递另一个论点,就像这样:

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

你已经将这个方法声明为接受一个参数,但是你传递的不仅仅是那个。

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

被预处理器重写为:

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

这是现在传递给编译器的文字文本,就像你自己以这种方式输入它一样。该方法被声明为单个NSString,但您传递了两件事。您需要更改方法的声明:

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