2012-03-21 56 views
0

我做了一个自定义日志记录类,它将某些事情记录到文件中。我试图制作一个宏,以便我可以使用我的自定义类,就像NSLog()一样,但它似乎没有正常工作。自定义日志记录宏不接受多个参数

这里是我如何定义宏:

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

logText:声明如下:

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

如果我只能传递一个参数,它工作正常。就像这样:

ECLog(@"test"); 

但是如果我通过另一种说法,是这样的:

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

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

任何想法?

+0

您得到有关方法调用的错误,而不是宏,对不对?如何声明'logText:'? – 2012-03-21 01:44:34

+0

是的,关于宏。我更新了我的帖子,显示了如何声明logText:。 – edc1591 2012-03-21 01:48:21

回答

2

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

你已经声明这个方法只有一个参数,但是你传递的不止一个参数。

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

被预处理器改写为:

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

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

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

好的,这需要处理错误,但是如何将所有参数组合到我的'logText:'方法中的'NSString'中? – edc1591 2012-03-21 01:57:06

+0

你过得怎么样?你不是在'logText:'里面把'va_list'作为参数吗? – 2012-03-21 01:58:23

+0

不,我只是把'theString'写到一个文件中。 – edc1591 2012-03-21 02:00:01

相关问题