C C 中可變引數函式的實現

2021-07-07 09:22:06 字數 1161 閱讀 3396



在c語言的stdarg.h標頭檔案中提供了三個函式va_start, va_end,va_arg和乙個型別va_list。利用它們,我們可以很容易實現乙個可變引數的函式。首先簡單介紹一下這三個函式。

假設現在有乙個名為f的函式,其函式定義為:

void

f(int

a, int

b, ...)

那麼,在函式的內部,為了獲得這些可變引數,就需要利用到va_start、va_arg和va_end三個函式。

va_list型別的變數可以用於儲存可變型別的變數,用它可以對可變變數進行遍歷;

va_list ap

在使用ap之前,必須呼叫va_start使得ap和可變引數進行關聯;

va_start(ap, b);

va_start的第二個引數是函式引數列表中最後乙個非可變引數的引數;

然後就可以呼叫va_arg對引數進行訪問了;

type va_arg( ap, type);

在變數處理完成之後,程式結束之前,應該呼叫va_end一次;

void

va_end(ap);

下面的程式展示了一種可變引數函式和cstring::formatv函式聯合使用的技術。該技術在vc++程式設計中被廣泛的使用:

1

#include

<

iostream

>

2#include

<

cstring

>

3#include

<

string

.h>

4#include

<

atltime.h

>56

using

namespace

::std;78

void

writelogentry(lpctstr pstrformat, ...)921

22int

main()

23

程式執行的結果為:

這篇更詳細: 

C C 中可變引數函式的實現

在c語言的stdarg.h標頭檔案中提供了三個函式va start,va end,va arg和乙個型別va list。利用它們,我們可以很容易實現乙個可變引數的函式。首先簡單介紹一下這三個函式。假設現在有乙個名為f的函式,其函式定義為 void f int a,int b,那麼,在函式的內部,為了...

C C 中可變引數函式的實現

在c語言的stdarg.h標頭檔案中提供了三個函式va start,va end,va arg和乙個型別va list。利用它們,我們可以很容易實現乙個可變引數的函式。首先簡單介紹一下這三個函式。假設現在有乙個名為f的函式,其函式定義為 void f int a,int b,那麼,在函式的內部,為了...

C C 可變引數函式

可變引數的函式,即函式的引數個數和引數型別不完全確定的函式。這類函式最常見的就是printf scanf函式。在c c 中,為了通知編譯器函式有可變引數,必須以三個點結束該函式的宣告。例如 printf函式的宣告 int printf const char format,scanf函式宣告 int ...