2017年5月22日星期一

Visual Assist 宏

# VA 宏使用方法
//不使用VA_ARG的情况
int MsgShow( int ibtstate ,TCHAR * szCaption,TCHAR * szMsgTxt, … )
{
TCHAR sztxtBuffer [1024] ;
va_list pArgList ;
/* The va_start macro is means
pArgList = (char *) &szFormat + sizeof (szFormat) ;
(defined in STDARG.H)*/
va_start (pArgList, szMsgTxt) ;
//使用更安全的函数代替_vsntprintf
StringCchVPrintf(sztxtBuffer,strlen(sztxtBuffer)+1,sztxt,parglist);
// The va_end macro just zeroes out pArgList for no good reason
va_end (pArgList) ;
return MessageBox (GetTopWindow(NULL), sztxtBuffer, szCaption, ibtstate) ;
}
//———————————————->如果使用VA_ARG,这个是根据微软文档改编的
int average(int count_t, int first, … )
{
int count = 0, sum = 0, i = first;//把i初始化为first是很重要的,不这样的话就会丢了第一个数据,i在这里相当于缓冲区,
va_list marker;

    va_start( marker, first );     /* Initialize variable arguments. */
    /*while( i != -1 )原来的微软实现方法
    {*/
    for(int k=0; k<count_t; k++)
    {
        //被我改成for循环了,这样才比较准确,否则你的变量参数里面有-1岂不惨了?如果想实现输入一个值也能实现该功能,再写一个同名函数就可以了
        sum += i;
        count++;
        i = va_arg( marker, int);
    }
    va_end( marker );              /* Reset variable arguments.      */
    return( sum ? (sum / count) : 0 );

}
//———————————————–>这个是上面的简化版本,始于写代码
void average(int count_t, int first, … )
{
int arraybuf[128]= {0}, i = first; //把i初始化为first是很重要的,不这样的话就会丢了第一个数据,i在这里相当于缓冲区,
va_list marker;
va_start( marker, first ); /* Initialize variable arguments. */
for(int k=0; k

没有评论:

发表评论