va_start,va_arg,va_end的用法

来源:互联网 发布:淘宝网冬季新款女鞋 编辑:程序博客网 时间:2024/05/16 06:59

来源:http://topic.csdn.net/t/20030418/20/1680144.html

头文件<stdarg.h> 按照   ANSI    C   标准中的规范说明,   以   <stdarg.h>   为界面的库包含着几个函数的宏,   它们提供了一种可移植的方法来控制可变参数表。注意:   不是任何   C   编译器都支持头文件   <stdarg.h>,   仅仅那些遵照   ANSI    C   标准的才支持这个文件。头文件   <stdarg.h>   说明了一个类型并定义了三个宏,   用来处理被调函数参数个数和类型未知的参数表。

例子:  
  #include<stdarg.h>  
  #include<stdio.h>  
   
  void   errmsg(int   code,...)  
  {  
  va_list   argptr;  
  char   *fmt;  
  va_start(argptr,code);//在访问任何未知参数之前argptr必须用宏va_start来初始化一次  
  if(code   &FILENAME)  
  fprintf(stderr,"%s:",argptr,char   *));  
  if(code   &LINENUMBER)  
  fprintf(stderr,"%s:",argptr,int));  
  if(code&WARNING)  
  fputs("warning:",stderr);  
  fmt=va_arg(argptr,char*);  
  fprintf(stderr,fmt,va_arg(argptr,char   *));  
  va_end(argptr);//参数处理完毕后,并且在退出errmsg()之前,   个宏被调用一次  
  }

stdarg.h   -   handle   variable   argument   list    
  #include   <stdarg.h>  
   
  #define     MAXARGS           31  
   
  int   execl   (const   char   *file,   const   char   *args,   ...)  
  {  
          va_list   ap;  
          char   *array[MAXARGS];  
          int   argno   =   0;  
                  va_start(ap,   args);  
          while   (args   !=   0)   {  
                  array[argno++]   =   args;  
                  args   =   va_arg(ap,   const   char   *);  
  }  
  va_end(ap);  
  return   execv(file,   array);  
  }  

来源:http://msdn.microsoft.com/zh-cn/library/kb57fad8.aspx

 

原创粉丝点击