va_start,va_arg,va_end的用法

來源: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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章