pro*c中怎样使用变参宏

发布于 2021-11-06 03:00:46 字数 736 浏览 848 评论 3

自己写了一个打印的函数,用于实现分级打印的功能,函数原型大致如下:

int myPrint(int iLevel,const char* sFile,const char* sFunction, const char* sLine, const char* sFmt,...)
{
    /*函数实现*/
}

然后想通过定义宏的形式,忽略掉sFmt之前的参数,以方便调用
宏定义为:

#define logInfo(__VA_ARGS__)  myPrint(_LEVEL_INFO,__FILE__,__FUNCTION__,__LINE__,__VA_ARGS__)
#define logError(__VA_ARGS__)  myPrint(_LEVEL_ERROR,__FILE__,__FUNCTION__,__LINE__,__VA_ARGS__)

此程序直接用cc编译后可以正常使用,能达到效果,但是在pro*c里面调用logInfo()时如果参数超过一个就会编译出错,从网上查得是pro*c不支持变参宏。
请问有没有办法可以使pro*c支持这个宏,或是通过其他办法,可以让我再调用我的myPrint()函数时,免去输入“_LEVEL_INFO,__FILE__,__FUNCTION__,__LINE__”这些参数?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦中楼上月下 2021-11-11 14:58:20

原来“_LEVEL_INFO,__FILE__,__FUNCTION__,__LINE__,__VA_ARGS__”都是宏,理解有偏差了

 

残花月 2021-11-11 14:51:32

引用来自“hikari”的答案

int logInfo(void * vaArgs)
{
  return myPrint(_LEVEL_INFO, ... , vaArgs);
}

int logError(void * vaArgs)
{
  return myPrint(_LEVEL_ERROR, ... , vaArgs);
}

情绪失控 2021-11-10 10:20:05
int logInfo(void * vaArgs)
{
  return myPrint(_LEVEL_INFO, ... , vaArgs);
}

int logError(void * vaArgs)
{
  return myPrint(_LEVEL_ERROR, ... , vaArgs);
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文