void function(const char *format, ...);这样就可以在function中使用可变参数C提供了几个宏用于使用可变参数
va_list va_start va_arg va_end
C函数要在程序中用到以下这些宏:
void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr );
va_list:用来保存宏va_start、va_arg和va_end所需信息的一种类型。为了访问变长参数列表中的参数,必须声明
va_list类型的一个对象 定义: typedef char * va_list;
va_start:访问变长参数列表中的参数之前使用的宏,它初始化用va_list声明的对象,初始化结果供宏va_arg和
va_end使用;
va_arg: 展开成一个表达式的宏,该表达式具有变长参数列表中下一个参数的值和类型。每次调用va_arg都会修改
用va_list声明的对象,从而使该对象指向参数列表中的下一个参数;
va_end:该宏使程序能够从变长参数列表用宏va_start引用的函数中正常返回。
va在这里是variable-argument(可变参数)的意思.
这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.
#include <cstdarg> #include <cstdio> #include <iostream> using namespace std; void Output(char *szFormat, ...) { va_list argptr; char szBuf[1024]; va_start(argptr, szFormat); vsprintf_s(szBuf,szFormat, argptr); cout<<szBuf<<endl; va_end(argptr); } //output the args int ArgsCount(char *szFormat, ...) { va_list argptr; int argNomber = 0; char *szBuf; va_start(argptr,szFormat); while (1) { szBuf = va_arg(argptr,char*); if(strcmp(szBuf,"0") == 0) break; cout<<"the parameter #"<<argNomber<<" is "<<szBuf<<endl; argNomber++; } va_end(argptr); return argNomber; } int main() { char czA[] = "wql"; char czB[] = "hello"; Output("Who are you? i am %s, %s",czA,czB); ArgsCount("Hello", "Who","are","you","i am","wql", "0"); return 0; }1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变 量是指向参数的指针.