可變參數函數(stdarg.h)的使用

2013/5/3記錄:函數

stdarg.h是C語言中C標準函數庫的頭文件,stdarg是由standard(標準) arguments(參數)簡化而來,主要目的爲讓函數可以接收可變參數。
 

stdarg.h數據類型

類型名稱
描述
相容
va_list
用來保存宏va_arg與宏va_end所需信息
C89

stdarg.h宏

巨集名稱
描述
相容
va_start
使va_list指向起始的參數
C89
va_arg
檢索參數
C89
va_end
釋放va_list
C89
va_copy
拷貝va_list的內容
C99
C99提供額外的宏,va_copy,它可以複製va_list。而va_copy(va2, va1)函數做用爲拷貝va1到va2。

 

訪問未命名的參數,首先必須在可變參數函數中聲明va_list類型的變量。
調用 va_start並傳入兩個參數:第一個參數爲va_list類型的變量,第二個爲省略號前最後一個有名字的參數的名稱;
接着每一調用va_arg就會返回下一個參數,va_arg的第一個參數爲va_list,第二個參數爲返回的類型。
最後va_end必須在函數返回前被va_list調用(va_list看成參數)(沒有要求要讀取完全部參數)。
 
 
 
使用例子:(自定義多按鈕AlertView):
- (void)showAlert:(id)sender Title:(NSString*)title Message:(NSString*)message cancelButton:(NSString*)cancelbutton otherButton:(NSString*)otherbutton,... {
   
   UIAlertView*alert = [[UIAlertViewalloc] initWithTitle:title
                                                    message:message
                                                   delegate:sender
                                          cancelButtonTitle:cancelbutton
                                          otherButtonTitles:otherbutton,nil];
    id eachObject;
va_list argumentList;
if (otherbutton)
    {
        va_start(argumentList, otherbutton);
        while ((eachObject = va_arg(argumentList, id)))
        {
            NSString *str = [NSStringstringWithFormat:@"%@",eachObject];
            [alert addButtonWithTitle:str];
        }
        va_end(argumentList);
    }
    [alert show];
    [alert release];
}
相關文章
相關標籤/搜索