計算機二級考試C語言輔導:C語言中不定參數(shù)的實現(xiàn)

字號:

相信大家都用過 printf 這個函數(shù),這就是利用不定參數(shù),來達到參數(shù)項目不固定的目的。但是請注意,由於K&R C中并不檢查參數(shù)型態(tài),so 在此是用ANSIC來說明,畢竟ANSI C是目前所有C Compiler都支援的標準;常在網路上看到有人推薦K&R The C Programming Language這本書,老實說這本是不錯(我以前也是看這本),但因為K&R C慢慢因為 ANSIC 的完整標準出現(xiàn),而面臨考驗,所以我建議若是初學者先從ANSI C看起,等對ANSI C的標準了解後,再回頭看這本(其實不看也沒差,雖然它號稱C %D但是請注意,由於K&R C中并不檢查參數(shù)型態(tài),so在此是用ANSIC來說明,畢竟ANSI C是目前所有C Compiler都支援的標準;常在網路上看到有人推薦K&R The C Programming Language這本書,老實說這本是不錯(我以前也是看這本),但因為K&R C慢慢因為 ANSIC 的完整標準出現(xiàn),而面臨考驗,所以我建議若是初學者先從ANSI C看起,等對ANSI C的標準了解後,再回頭看這本(其實不看也沒差,雖然它號稱C語言圣經,但時代在變,有些東東開始不適用。不過還是有看的價值)
    //
    // 固定的參數(shù)一定要放前面!!
    int FUNC(int xx,...)
    {
    int tmp;
    va_list arg_ptr; // 用va_list聲明指向引數(shù)列表的 Pointer
    va_start(arg_ptr,xx); // 從引數(shù)表中取得第一個引數(shù)
    // 第一個引數(shù)就是 xx 自己(xx是最后一個固定變量)
    tmp=va_arg(arg_ptr,int); // 從引數(shù)表中取得int 型態(tài)引數(shù)
    // 一直呼叫 va_arg 即可取得所
    // 有引數(shù)(第二個參數(shù)int是當前不定變量的類型 )
    va_end(arg_ptr); // 取完後將 arg_ptr = NULL
    // 以便歸還 stack 空間(要在所有的不定變量引用完之后再用va_end(),否則會有無法預測的結果。)
    }