我一直在开发使用日志记录机制的应用程序,并且实现了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__ )