我們知道在c++中可以通過函式過載的方式為函式提供接受可變個引數的功能,而在c語言中並沒有過載的機制,不過c語言仍然提供了在標頭檔案< stdarg.h >中提供了類似的功能。
在標頭檔案中提供了va_list型別來存放可變引數列表(這個型別應該是乙個指標),以及三個巨集來實現相關的操作,三個巨集的原型如下:
void va_start(va_list ap, last_arg)
//這個巨集初始化 ap 變數,它與 va_arg 和 va_end 巨集是一起使用的。
//last_arg 是最後乙個傳遞給函式的已知的固定引數,即省略號之前的引數。
type
va_arg(va_list ap, type)
//這個巨集檢索函式引數列表中型別為 type 的下乙個引數,並返回。
void va_end(va_list ap)
//這個巨集用於進行清理工作,例如釋放動態分配的用於存放引數的記憶體。
//如果在從函式返回之前沒有呼叫 va_end,則結果為未定義。
對可變引數的使用遵循如下步驟:
在函式原型中使用省略號」…「,注意省略號應為最後乙個引數。
在函式定義中建立乙個va_list型別的變數。
使用巨集va_start(ap, larg)使變數ap初始化為乙個引數列表,其實這個巨集是將ap指向了引數larg後面的位置,也就是可變引數列表的開頭。
使用巨集va_arg(ap, type)訪問引數列表,每訪問乙個引數後,ap都會向後移動。
使用巨集va_end(ap)完成清理工作。
我們對c語言的格式化並不陌生,printf函式就是實現格式化輸出的乙個典型的例子。函式printf的原型如下
int printf ( const char * format, ... );
顯然格式化輸出的實現要依賴於函式接受可變引數的功能。
下面我們根據上面的講解實現乙個向標準錯誤輸出程式錯誤資訊的錯誤處理函式。
#include
#include
#include
#include
#include
void error_print(char *format, ...)
C語言格式化輸出
1.格式控制符形式 o 格式控制符 其中,中括號裡的內容是可選的,裡的內容是必須的。以下對各個標誌的含義簡要介紹 表示格式控制的起始符號,必不可少。格式控制起始位置 表示對齊標誌,表示右對齊,表示左對其,預設情況下為右對齊。對齊標誌 o 表示當實際長度沒有格式控制的長度大時,用 o 補全。補全內容 ...
C語言格式化輸出
d整型輸出,d長整型輸出 o以八進位制數形式輸出整數 x以十六進製制數形式輸出整數,或輸出字串的位址 u以十進位制數輸出unsigned型資料 無符號數 c用來輸出乙個字元 挨個輸出陣列中的元素 s用來輸出乙個字串 一次輸出整個陣列的元素 f用來輸出實數,以小數形式輸出,預設情況下保留小數點6位 e...
C語言 printf格式化輸出,引數詳解
int main int argc,char argv double inserttime1 12321 printf 15s n inserttime 左對齊,15位長度,不夠補空格 printf 15s n inserttime 右對齊,15位長度,不夠補空格 printf 015s n ins...