變參函式的應用得比較少.
輸出log資訊功能的函式演常會用到變參函式.
什麼是變參函式? 比如 printf("個數:%d, 總數:%d", a, b); printf就是變參函式, 因為其引數的個數不是固定的.
變參函式一般用到下列巨集:
va_arg
retrieve argument from list
va_end
reset pointer
va_start
set pointer to beginning of argument list
下面給出乙個列子:
void writelog(lpctstr lpszargument, ...)
tchar szbuf[4000] = ;
va_list arglist;
va_start(arglist);
int ilen = _vstprintf(buf, lpszargument, arglist);
va_end(arglist);
cstring str(buf, ilen);
/// 之後寫到檔案,或trace出來.
trace(buf);
變參函式剖析
變參函式定義形式如func type a,要求至少乙個固定引數,因為需要通過這個引數來確定究竟有多少個引數 以及引數的型別。windows中,變參函式用來獲取引數的幾個巨集定義如下。typedef char va list define addressof v v define intsizeof ...
變參函式詳解
在呼叫函式時,如果我們希望函式的引數個數是可變的,那麼便需要用到變參函式,既在每次函式呼叫時輸入的引數個數不定。我們需要知道以下兩點 1 函式形參入棧方向為自右向左 2 在乙個程序的記憶體空間中,棧低為高位址,棧頂為低位址。所以我們可以從最後乙個入棧的引數 形參第乙個 根據位址以及棧空間的特點依次找...
變參函式實現細節
c語言的函式雖然不具備c 的多型性,但也可以接受引數不確定的情況,當然,c語言中的變參函式實際在功能上是受限的,廢話不多講,下面來看看變參函式的邊邊角角的問題。討論之前我們來看一下最熟悉的變參函式printf的原型宣告 int printf const char format,注意到,在函式中宣告其...