请高手帮忙解释一下Windows API下的几个宏

Allemand 2004-05-13 04:02:56
在<<Programming Windows>>中有如下函数,请高手帮忙解释一下参数表中的三个点是什么意思?函数体中的那几个宏是怎么回事?谢谢啦.

void Printf (HWND hwnd, TCHAR * szFormat, ...)
{
TCHAR szBuffer [1024] ;
va_list pArgList ;

va_start (pArgList, szFormat) ;
wvsprintf (szBuffer, szFormat, pArgList) ;
va_end (pArgList) ;

SendMessage (hwnd, EM_SETSEL, (WPARAM) -1, (LPARAM) -1) ;
SendMessage (hwnd, EM_REPLACESEL, FALSE, (LPARAM) szBuffer) ;
SendMessage (hwnd, EM_SCROLLCARET, 0, 0) ;
}

相关的宏定义:

#ifndef _VA_LIST_DEFINED
#ifdef _M_ALPHA
typedef struct {
char *a0; /* pointer to first homed integer argument */
int offset; /* byte offset of next parameter */
} va_list;
#else
typedef char * va_list;
#endif
#define _VA_LIST_DEFINED
#endif

#ifdef _M_IX86


#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )

#elif defined(_M_MRX000)
...全文
46 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluejugar 2004-05-14
  • 打赏
  • 举报
回复
...表示不定参数.
如常用的:
try
{
A;
}
catch(...)
{
B;
}
就表示无论任何异常均执行B.

Allemand 2004-05-14
  • 打赏
  • 举报
回复
多谢各位,宏的功能我基本上明白了,能再详细解释一下那几个宏定义吗?
leonchew 2004-05-13
  • 打赏
  • 举报
回复
学习...
piaozi2003 2004-05-13
  • 打赏
  • 举报
回复
补充上面:va_list,va_start,va_end不是WIN32API才有的,标准C中的一种语法,几乎所有的C都支持,否则怎么实现printf这种带有可变参数的函数呢?
cngdzhang 2004-05-13
  • 打赏
  • 举报
回复
...表示的是不定参数,即参数个数是不确定的

看帖子:

http://expert.csdn.net/Expert/topic/3034/3034923.xml?temp=9.049624E-02
lifanxi 2004-05-13
  • 打赏
  • 举报
回复
va_list、va_start和va_end等几个宏就是用于支持...这样的可变参数的。
如标准C的printf()的参数可以有不定数量个参数。
可以参考MSDN中的示例或者其实您给的例子也很清楚了。va_list定义一个变量后,用va_start和va_end组合就可依次取中...中的一系列参数。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧