va_start()va_end()函數應用

字號:

1:當無法列出傳遞函數的所有實參的類型和數目時,可用省略號指定參數表
    void foo(...);
    void foo(parm_list,...);
    2:函數參數的傳遞原理
    函數參數是以數據結構:棧的形式存取,從右至左入棧.eg:
    #include
    void fun(int a, ...)
    {
    int *temp = &a;
    temp++;
    for (int i = 0; i < a; ++i)
    {
    cout << *temp << endl;
    temp++;
    }
    }
    int main()
    {
    int a = 1;
    int b = 2;
    int c = 3;
    int d = 4;
    fun(4, a, b, c, d);
    system("pause");
    return 0;
    }
    Output::
    1
    2
    3
    4
    3:獲取省略號指定的參數
    在函數體中聲明一個va_list,然后用va_start函數來獲取參數列表中的參數,使用完畢后調用va_end()結束。像這段代碼:
    void TestFun(char* pszDest, int DestLen, const char* pszFormat, ...)
    {
    va_list args;
    va_start(args, pszFormat);
    _vsnprintf(pszDest, DestLen, pszFormat, args);
    va_end(args);
    }