根據printf函式來講解可變引數

2021-08-10 13:37:13 字數 810 閱讀 3918

在c語言中常用printf函式輸出各種型別的數值,而且輸出的引數可多可少,這就涉及到了可變引數函式的定義。 在此

模擬實現

printf函式,可完成下面的功能,

能完成下面函式的呼叫。 

print("s ccc d.\n","hello",'b','i','t',100); 

函式原型: 

print(char *format, ...) 

**如下:

#define

_crt_secure_no_warnings

#include

#include

#include

void print(char *tmp, ...)   //實現可變形參

else

if (*tmp == 's')

else

if (*tmp == 'd')

tmp++; }

va_end(arg);     //最後,當訪問完最後乙個可變引數之後,我們需要呼叫va_end。 }

int main()  

但是,可變引數會有一些限制,例如:

1.可變引數必須從頭到尾逐個訪問。如果你在訪問幾個引數之後想要終止,這是可以的,但是,如果你要訪問中間的引數,那是不行的。

2.可變引數中至少有乙個命名引數。如果連乙個命名引數都沒有,就無法使用va_start。

3.這些巨集無法判斷每個引數的型別。

4.這些巨集無法直接判斷實際存在引數的數量。

5.如果在va_arg中指定了錯誤的型別,那麼後果是不可**的。

希望這些對大家有所幫助。

printf函式的講解

printf函式的常見的用法 includeint main void 用於直接輸出資訊 includeint main void includeint main void 兩個輸出控制符之間沒有新增空格 輸出結果 1020 兩個輸出控制符之間新增了空格 輸出結果 10 20 總結 我們可以看到在兩...

printf談可變引數函式的實現

一直以來都覺得printf似乎是c語言庫中功能最強大的函式之一,不僅因為它能格式化輸出,更在於它的引數個數沒有限制,要幾個就給幾個,來者不拒。printf這種對引數個數和引數型別的強大適應性,讓人產生了對它進行探索的濃厚興趣。關鍵字 printf,可變引數 1.使用情形 int a 10 doubl...

可變引數函式 以printf為例子

void foo int argv1,char argv2,在參數列的末尾給出省略號,表明這個函式的引數是可變的 程序在呼叫函式時,會將函式引數壓入使用者棧,壓入的順序是從參數列右端開始,從右至左的壓棧順序支援了可變引數的實現。左邊的引數在低位址,右邊的引數在高位址。進入函式後,以左邊的引數為線索,...