zoukankan      html  css  js  c++  java
  • va_start、va_end、va_list的使用

    获取省略号指定的参数
    在函数体中声明一个va_list,然后用va_start函数来获取参数列表中的参数,使用完毕后调用va_end()结束。像这段代码:
    void 
    TestFun(char* pszDest, int DestLen, const char* pszFormat, ...)
    {
    va_list 
    args;
    va_start(args, 
    pszFormat);
    _vsnprintf(pszDest, DestLen, pszFormat, 
    args);
    va_end(args);
    }

    4.va_start使argp指向第一个可选参数。va_arg返回参数列表中的当前参数并使argp指向参数列表中的下一个参数。va_end把argp指针清为NULL。函数体内可以多次遍历这些参数,但是都必须以va_start开始,并以va_end结尾。

      1).演示如何使用参数个数可变的函数,采用ANSI标准形式
      #include 〈stdio.h〉
      #include 
    〈string.h〉
      #include 〈stdarg.h〉
      
      int demo( char, ... );
      void 
    main( void )
      {
         demo("DEMO", "This", "is", "a", "demo!", 
    "");
      }
      
      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;
      }

    2)//示例代码1:可变参数函数的使用
    #include "stdio.h"
    #include "stdarg.h"
    void 
    simple_va_fun(int start, ...)
    {
        va_list 
    arg_ptr;
       int nArgValue =start;
        int 
    nArgCout=0;     //可变参数的数目
        va_start(arg_ptr,start); 
    //以固定参数的地址为起点确定变参的内存起始地址。
        do
        
    {
            
    ++nArgCout;
            printf("the %d th arg: 
    %d\n",nArgCout,nArgValue);     
    //输出各参数的值
            nArgValue = 
    va_arg(arg_ptr,int);                      
    //得到下一个可变参数的值
        } while(nArgValue != 
    -1);               
        
    return;
    }
    int main(int argc, char* argv[])
    {
        
    simple_va_fun(100,-1);
        
    simple_va_fun(100,200,-1);
        return 0;
    }

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/GnagWang/p/2312457.html
Copyright © 2011-2022 走看看