在c語言的stdarg.h標頭檔案中提供了三個函式va_start, va_end,va_arg和乙個型別va_list。利用它們,我們可以很容易實現乙個可變引數的函式。首先簡單介紹一下這三個函式。
假設現在有乙個名為f的函式,其函式定義為:
void那麼,在函式的內部,為了獲得這些可變引數,就需要利用到va_start、va_arg和va_end三個函式。f(int
a, int
b, ...)
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下面的程式展示了一種可變引數函式和cstring::formatv函式聯合使用的技術。該技術在vc++程式設計中被廣泛的使用:va_end(ap);
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 ...