變參函式設計

2021-04-13 08:51:12 字數 611 閱讀 9298

變參函式的應用得比較少.

輸出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,注意到,在函式中宣告其...