函数参数后面的省略号是什么意思

看windows程序设计这本书的时候看到有这么个函数
int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
TCHAR szBuffer [1024] ;
va_list pArgList ;
// The va_start macro (defined in STDARG.H) is usually equivalent to:
// pArgList = (char *) &szFormat + sizeof (szFormat) ;
va_start (pArgList, szFormat) ;
// The last argument to wvsprintf points to the arguments
_vsntprintf ( szBuffer, sizeof (szBuffer) / sizeof (TCHAR),
szFormat, pArgList) ;
// The va_end macro just zeroes out pArgList for no good reason
va_end (pArgList) ;
return MessageBox (NULL, szBuffer, szCaption, 0) ;
}
不知道最后一个参数...是什么意思,还有这个函数到底是怎么工作的呢?
希望能得到详细的解释!!

这个是可变参数的用法。
va_list相关一般包含以下4个操作:
va_list XX //设定传入的参数的指针
va_start //初始化参数指针
va_arg //通过栈操作,根据偏移量读取参数值
va_end //参数读取完毕

va_start (pArgList, szFormat) ;
上面的szFormat就是初始的栈指针位置(第一个可变参数的首地址),以他为基准,进行偏移
例如:
va_arg( pArgList, unsigned long ) ;
那就是指以偏移unsigned long的siz,将其中的值作为参数。

可变参数的实现,其实是通过栈来实现的。

具体的细节原理,就不写了,你上网搜一下,挺多的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-01-08
最后一个参数...

这是书本介绍这个函数,最后...,表示还有一些参数,(不只是一个),省略了,下面不谈最后的几个参数。它们与 函数返回:
MessageBox (NULL, szBuffer, szCaption, 0) ;
里的参数也无关。
第2个回答  2009-01-08
是不定参数的函数

比如标准C的printf()就是这样的函数

你用MSDN搜索va_list就能看到更详细的说明
相似回答