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

2021-08-19 17:14:20 字數 853 閱讀 2645

**:

在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++程式設計中被廣泛的使用:

#include #include #include #include using namespace::std;

void writelogentry(lpctstr pstrformat, ...)

int main()

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 ...