我一直在开发使用日志记录机制的应用程序,并且实现了printf函数,该函数需要使用各种数量的参数并打印以记录某些消息,我想要的是在此函数中添加函数名称,但是我没有写什么每个函数调用中的此参数。

所以我决定写一个宏,结果并不容易

#define WriteToLogParams(szMessage, nLogLevel, param1, param2) WriteToLogParamsFunc(szMessage, __FUNCDNAME__, nLogLevel, param1, param2)

首先,我认为存在某种类型的宏重载并且可以轻松实现,但是事实证明,如果我编写另一个具有相同名称但参数数量不同的宏,则将无法编译。因此,要使其正常工作,我应该使每个宏名称唯一。

那么有什么聪明的方法可以做到这一点?

谢谢你提前。

最佳答案

您可以使用__VA_ARGS__

例如:

WriteToLogParamsFunc(const char *__file, int __line, const char* __func, int nLogLevel, const char *szMessage, ...);

#define WriteToLogParams(nLogLevel, szMessage, ...) WriteToLogParamsFunc(__FILE__, __LINE__, __FUNCTION__, nLogLevel, szMessage, __VA_ARGS__ )

10-07 18:53