我的桌面上运行了一个 linux 应用程序,我想将 syslog() 调用重定向到 printf() 调用。
注意:我不想替换呼叫,只是重定向
所以我写了一些代码来做到这一点:
#ifndef EMBED
#define syslog(level, stuff) printf("SYSLOG: %s\n", stuff)
#endif
在我使用它的一个文件中效果很好。我把它移到了一个新文件并得到了一个错误:
error: macro "syslog" passed 3 arguments, but takes just 2
我知道错误是因为新文件中的调用是混合的,有些使用 2 个 syslog 参数,有些使用 3 个。我也知道我需要通过变量参数列表以某种方式重定向它,但我该怎么做呢?我还没有让它工作...
据我了解, syslog() 和 printf() 应该是:
void syslog(int priority, const char *format, ...)
int printf(const char *format, ...)
所以我尝试了:
#define ERR 3
#ifndef EMBED // This is not defined in my env, btw
#define syslog(pri, fmt, ...) printf(fmt, ...)
#endif
...
void main() {
...
syslog(ERR, "test");
但这给出了错误:
error: expected expression before ‘...’ token
关于这个宏应该如何看待/使用的建议?