C語言變參函式的兩個實現

2021-08-30 22:38:12 字數 700 閱讀 8549

國慶假期看了《程式設計師的自我修養——鏈結、裝載和庫》的大部分,其中p337提到了c語言變長引數的一些實現原理,書上的乙個例子是(我對書上的**作了一些小改動,書上的例子編譯有點小問題):

#include #include #include #include /*! * @brief 計算n個整數之和,這個暫時沒有計算結果越界的問題 * * @param [in]num 要計算的整數個數 * @return 計算結果 */ long sum(int num,...) return ret; }

這裡利用了函式的棧上的位置依次排列的原理(即不定引數的位址依次在變數num的高位址方向,同時函式呼叫約定採用的是cdecl)。下面是我參考msdn實現和c語言的printf函式一樣功能的myprintf函式:

/*! * @brief 格式化字串輸出到控制台 * * @param [in]pformat 格式化字串 * @return 無 */ void myprintf(tchar* pformat, ... )

上面兩個函式的測試**:

int _tmain(int argc, _tchar* argv)

測試環境:win xp + sp3, vs 2008 + sp1,unicode字符集。

1. 《程式設計師的自我修養--鏈結、裝載和庫》,俞甲子 / 石凡 / 潘愛民

2. msdn(與vs 2008 + sp1配套)

C語言變參函式的兩個實現

國慶假期看了 程式設計師的自我修養 鏈結 裝載和庫 的大部分,其中p337提到了c語言變長引數的一些實現原理,書上的乙個例子是 我對書上的 作了一些小改動,書上的例子編譯有點小問題 include include include include brief 計算n個整數之和,這個暫時沒有計算結果越界...

C語言變參函式的實現原理

1.變參函式簡單示例 include include int accumlate int nr,va end arg return result int main 2.變參函式的實現原理 define va list void define va start arg,start arg va lis...

C語言(變參函式)

c語言雖然沒有c 的函式過載特性,但也可以實現變參,但要保證第乙個引數資訊的完整性。拓展 定義變參函式時,第乙個引數一般是字串,攜帶後續變參的型別和數量資訊,變參使用三點來表示,如 void sumup const char info,再使用va list va start va arg 和va e...