C++可变参数

来源:互联网 发布:centos安装snmp服务 编辑:程序博客网 时间:2024/06/06 07:01

     这个东西很少用,每次都要到处找,所以这里做个记录。

     可变参数值得是类似c语言里的printf(const char* format, ...)这样的参数,其中...表示参数个数可变。

      宏也同样支持这样使用:


      宏中的用法:#define LOG_OUT(format, ...) printf(format, ##__VA_ARGS__)   其中__VA_ARGS__表示可变参数。

      在程序中,是通过var_start var_end var_arg 来获取...中的参数:

{    char tmp[1024];        memset(tmp, 0, 1024);    va_list pArgList;    va_start(pArgList, format);    vsnprintf(tmp, 1024, format, pArgList);    va_end(pArgList);        return std::string(tmp);}


       如果需要取得每一个参数可以使用var_arg,它需要传入一个va_list的变量和类型。如:如果需要int,可以这样调用

int a = va_arg(pArgList, int);


  1 #include <cstdio>  2 #include <cstdlib>  3 #include <cstdarg>  4   5 void logMultiArgsOfInt(int num, ...)  6 {  7     va_list list;  8     va_start(list, num);  9     for (int i = 0; i < num; ++i) { 10         int t = va_arg(list, int); 11         printf("%d\n", t); 12     } 13     va_end(list); 14 } 15  16 int main(int argc, char **argv) 17 { 18     logMultiArgsOfInt(5, 1, 2, 3, 4, 5); 19     return 0; 20 }        

0 0
原创粉丝点击