C++定义的函数是可以支持函数参数个数不确定的。VA_LIST是在C++语言中解决变参问题的一组宏,所在头文件:#include <stdarg.h>,用于获取不确定个数的参数同时使用"…"代替多个参数,调用时只需要根据需要传入多个参数。
VA_LIST的用法:
- 首先在函数里定义一具VA_LIST型的变量,这个变量是指向参数的指针;
- 然后用VA_START宏初始化刚定义的VA_LIST变量;
- 然后用VA_ARG返回可变的参数,VA_ARG的第二个参数是你要返回的参数的类型(如果函数有多个可变参数的,依次调用VA_ARG获取各个参数);
- 最后用VA_END宏结束可变参数的获取。
遍历可变参数(VA_LIST)
-
传入的时候指定参数个数
void arg_cnt(int cnt, ...) { int value=0; int i=0; int arg_cnt=cnt; va_list arg_ptr; va_start(arg_ptr, cnt); for(i = 0; i < cnt; i++) { value = va_arg(arg_ptr,int); printf("value%d=%d\n", i+1, value); } va_end(arg_ptr); }
调用方法:“arg_cnt(4,1,2,3,4);”,第一个参数为传入参数个数。
-
传入的时候指定特殊的字符以标示为结
int demo( char msg, ... ) { va_list argp; int argno = 0; char para; va_start( argp, msg ); while (1) { para = va_arg( argp, char); if ( strcmp( para, "") == 0 ) break; printf("Parameter #%d is: %s\n", argno, para); argno++; } va_end( argp ); return 0; }
调用方法:“demo(“DEMO”, “This”, “is”, “a”, “demo!”, “”);”,最后一个参数标示结束。