vc平台上的c语言支持变长参数的宏吗?

jpzhu 2004-02-02 03:33:32
gcc里有类似的定义,比如
#define SOFT_LOG(args...) \
printf("soft_log:\t%s\t%i\n", __FILE__, __LINE__); \
printf(args); \
printf("\n")
这个args...就是变长的,请问在vc中如何实现类似的功能?
...全文
136 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
021850524 2004-02-03
  • 打赏
  • 举报
回复
要的是变长参数的宏,不是函数.
jpzhu 2004-02-03
  • 打赏
  • 举报
回复
to DoItFreely:
最后使用的方法是这样的:
void varprint(const char *format,...)
{
va_list ap;
va_start(ap,format);
vprintf(format, ap);
va_end(ap);
printf("\n");
}
虽然printf加在这里比较难看,不过这么做应该能解决我的问题了。你的看法如何?

oo 2004-02-03
  • 打赏
  • 举报
回复
用加括号的办法,不过用起来怪怪的

#define SOFT_LOG(args) \
printf("soft_log:\t%s\t%i\n", __FILE__, __LINE__); printf args; \
printf("\n")

调用的时候 SOFT_LOG( (参数列表) );
oyd 2004-02-03
  • 打赏
  • 举报
回复
目前vc的预处理器好像是不支持
doer_ljy 2004-02-02
  • 打赏
  • 举报
回复
如大家所说
DoItFreely 2004-02-02
  • 打赏
  • 举报
回复
由于__FILE__和__LINE__的缘故,等价于楼主意思的代码如下:

void varprint(const char *format,...)
{
va_lisp ap;
va_start(ap,format);
vprintf(ap);//库函数
va_end(ap);
}
#define SOFT_LOG \
printf("soft_log:\t%s\t%i\n", __FILE__, __LINE__); varprintf
如果不使用缓冲区,末尾的"\n"加不上去
使用缓冲区的话,varprint()只需要把vprintf()换成vsprintf()打印输出到缓冲区,再把"\n"附加到缓冲区末尾,最后printf()缓冲区的内容即可。
缓冲区多大才合适?根据自己的需要确定吧。如果以上代码会被频繁调用,建议不要定义很大的auto类型缓冲区数组。
yjh1982 2004-02-02
  • 打赏
  • 举报
回复
不支持!
DoItFreely 2004-02-02
  • 打赏
  • 举报
回复
void varprint(const char *format,...)
{
va_lisp ap;
printf("soft_log:\t%s\t%i\n", __FILE__, __LINE__);
va_start(ap,format);
vprintf(ap);//库函数
va_end(ap);
}
flyelf 2004-02-02
  • 打赏
  • 举报
回复
gz

69,370

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧