[ASM C/C++] C語言函式的可選性自變數

ABeen發表於2015-01-29

    函式的可選性自變數 

    C語言允許定義自變數數量可變的函式,稱為variadic函式。variadic函式需要固定數目的強制性自變數,後面是數量可變的可選性自變數。                                

    也就是說必須至少有一個強制性自變數。

    variadic 可變引數數量有前面的強制性自變數決定,或者有定義可選性自變數列表的特殊值決定。

    經典的函式是printf 和 scanf,這兩個是通過格式化字串來提取可變引數的數量的。

    

    定義:

        void test(int count, ...)

    

    編寫variadic函式時,必須用va_list型別定義自變數指標,來在存取可選性自變數。

    可以用 stdarg.h 標頭檔案中的四個巨集來處理自變數指標。

   

    void va_start( va_list argptr, lastparam ); 

    開始使用可選性自變數之前,先呼叫此巨集來初始化。

    使用第一個可選性自變數的位置來初始化argptr指標,第二個引數為函式的最後一個有名稱引數。

    

    void va_arg( va_list argptr, type );

    取可選性自變數,並前移指標。type為可剛剛讀入的自變數型別。

 

    void va_end( va_list argptr );

    不再需要自變數指標時,呼叫va_end. 使用va_start 或 va_copy 來重新初始化且過的自變數指標,也要先呼叫va_end。

 

    void va_copy( va_list dest, va_list src);

    使用目前的src自變數初始化dest。

 

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

//可選性自變數函式,count 為數量
void arg_var(char name[], int count, ...)
{
    printf("name is: %s \ncount is: %d \n", name, count);

    va_list argptr;          //定義自變數型別
    va_start(argptr, count); //初始化自變數
    for(int i=0; i<count; i++)
    {
        printf("%s  \n", va_arg(argptr, char *)); //取值列印
    }        
    va_end(argptr); //結束使用
}


int main(int argc, char * argv[])
{
    // call arg_var
    arg_var("abeen", 3, "strarg1", "strarg2", "strarg3");
}

 

相關文章