C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++中可变参数宏

C++中可变参数宏使用指南

作者:TABE_

掌握C++可变参数宏的实战技巧!本文教你用__VA_ARGS__和##灵活处理不同数量的宏参数,避免空参数编译错误,通过va_list和vsnprintf()实现强大的格式化打印字符串功能,轻松提升代码效率,立即点击,学会这个C++高级技巧

可变参数宏(Macro With Variable Number of Arguments or Variadic Macro) 是指我们可以像定义能够接受不同数量参数的普通C++函数一样,定义一个能够接受不同数量参数宏。

基本语法

#define DEBUG(format, ...) fprintf (stderr, format, __VA_ARGS__)
#define DEBUG(format, args...) fprintf (stderr, format, args)
#define DEBUG(format, args...) fprintf (stderr, format, ##args)
#define DEBUG(format, ...) fprintf (stderr, format, ##__VA_ARGS__)

实现格式化打印字符串

使用可变参数宏实现格式化打印字符串往往需要用到vsnprint(),函数定义如下:

int vsnprintf( char* buffer, size_t buf_size, const char* fmt, va_list vlist );

vsnprintf() 函数将格式化字符串fmt 指向的字符串写入字符串缓冲区buffer,可写入的最大字符数为 buf_size ,写入字符后,添加终止空字符;如果buf_size 等于零,则不写入任何内容并且buffer 可能是空指针。

除此之外,格式化字符串fmt可能包含以 % 开头的占位符,这些占位符被作为列vlist 传递的变量的值替换

va_list

va_list类型的变量保存了可变参数的各种信息,用法如下:

va_list   args;

创建一个va_list类型的变量args,此时 args 还未初始化,类似一个空指针,接下来我们要把这个‘’空指针‘’ 指定到我们需要的位置上,比如指到fmt后。

va_start(args, fmt);

调用 va_start() ,args指向了fmt之后的参数,接下来就可以用args访问这些参数了。

 //每次返回一个int ( 根据实际情况确定类型) 参数并把位置往前推1,一般从前往后循环调用。
var_arg(args,int);   

访问完毕后,把args置空。

 va_end(args);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文