C標準庫學習--可變參數函數的實現方法

標準C語言中函數定義要求參數的類型和個數都是固定的,但是有寫時候我們並不能確定參數的具體個數和類型,因此需要定義可變參函數,爲解決這個問題,C標準庫引入了stdarg.h,這個頭文件中定義了一些宏,用來實現定義可變參函數。典型的可變參函數如printf。但是C編譯器要求可變參數至少需要有一個固定參數。那麼要實現一個可變參函數,需要做那些操作呢,其實很簡單,只要做以下3步操作即可。
1、取得可變參數列表的指針。可以通過調用va_start()函數獲得。
2、對可變參數列表進行操作。通過va_arg()獲取每一個參數,調用一次獲取一個參數。你可以在任何時候停止調用va_arg(),來忽略後續的若干參數。
3、調用va_end()結束對可變參列表的引用。

有了這個步驟,實現一個可變參函數就比較簡單了,那我們先看下上面這幾個參數的原型。

va_list //用於指向可變參數列表
void va_start(va_list ap, last-required-parameter);    //last-required-parameter 最後一個必須的參數
type va_arg(va_list ap, type);    //type爲參數類型
void va_end(va_list ap);

下面看一段例子,看看如何使用上面的函數實現可變參函數:

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

int add_em_up(int count, ...)
{
    va_list ap;
    int i;
    int sum = 0;

    va_start(ap, count);

    for(i = 0;i < count; i++)
    {
        sum += va_arg(ap, int);
    }

    va_end(ap);

    return sum;
}


int main(int argc, char **argv)
{
    int sum;

    sum = add_em_up(5, 3,4,5,6,7);

    printf("sum = %d\n", sum);
    return 0;
}

結果輸出:
sum = 25

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