1. 程式人生 > >C語言之可變引數

C語言之可變引數

int pritnf(const char*,..);
//這裡的printf函式的形參是不確定的。

與可變引數相關的庫是 <stdarg.h> ,其中有幾個常用的巨集。

使用可變引數時,需要先定義一個 va_list 的變數。接著使用va_start(v,l)函式,v為先前定義的變數,l為第一個引數。

之後用va_arg(v,l)函式,取輸入的引數,v為先前定義的變數,l為引數型別。最後要記得,用va_end釋放先前定義的va_list變數。

一段自己的my_printf();

#include <stdarg.h>
#include <stdio.h>

int my_printf(const char* string,...)
{
  va_list ap;
  char* temp;
  int cup;
  temp=string;
  while(*temp!='\0')
  {
    if(*temp=='\')
    {
      if(*++temp=='n')
      {
        putchar('\n');
      }
      else if(*++temp=='\r')
      {
        putchar('\r');
      }
    }
    else if(*temp=='%')
        {
           switch(*++temp)
           {
             case 'd':
             cup=va_arg(ap,int);
             //...呼叫十進位制轉字串的函式
             break;
    
             case 'c':
             cup=va_arg(ap,char);
             putchat(cup);
             break;
            //...
           }
        }
    else 
   {
     putchar(*temp);
   }
   temp++;
      }
 va_end(ap);
}