1、可變引數的概念
c語言中支援引數可變的函式,printf就是乙個典型的引數可變函式,其函式原型如下:
#include
int printf(const char* format, ...);
printf函式的原型中第1個引數format是固定的,後面的引數個數和型別都是可變的。編譯器使用三個點「…」作為引數的佔位符,告知編譯器第1個引數format的後面還可能會有若干的引數。
2、乙個簡單的可變引數的函式
#include
#include
int print_args(int begin, ...)
va_end(ap); /* 引數處理結束,做一些清理工作 */
return
0;}
print_args函式中的關鍵點解釋如下:
-標準標頭檔案stdarg.h:這個標頭檔案中定義了一系列的巨集來處理這個可變長度的引數列表。如果需要實現乙個可變引數的函式,該標頭檔案必不可少。
-型別va_list:這個型別定義在stdarg.h標頭檔案中。va_list定義為這樣乙個資料型別,迴圈使用且每次指向乙個可變的引數。因此該型別的變數代表整個引數列表。
-巨集va_start:va_start巨集初始化乙個va_list型別的變數,使其指向第1個可變的引數。經過初始化後,變數ap就可以代表整個引數列表了,因此該巨集必須在使用引數列表之前使用。每個可變引數的函式的第1個引數必須固定,否則無法進行初始化,並且將變數ap指向該引數列表。
-巨集va_arg:巨集va_arg返回乙個可變長度引數的值並使ap指向下乙個可變的引數,該巨集使用乙個型別名來確定要返回的型別和指標ap需要移動的位元組單位。
-巨集va_end:做一些必要的清理工作,需要在程式結束前使用。
可變引數的函式實現流程如下:
可變引數函式
c函式要在程式中用到以下這些巨集 void va start va list arg ptr,prev param type va arg va list arg ptr,type void va end va list arg ptr va list 用來儲存巨集va start va arg和v...
可變引數函式
一 什麼是可變引數 我們在c語言程式設計中有時會遇到一些引數個數可變的函式,例如printf 函式,其函式原型為 int printf const char format,它除了有乙個引數format固定以外,後面跟的引數的個數和型別是可變的 用三個點 做引數佔位符 實際呼叫時可以有以下的形式 pr...
可變引數函式
stdarg.h是 c語言中c標準函式庫的 標頭檔案,stdarg是由standard 標準 arguments 引數 簡化而來,主要目的為讓函式能夠接收可變引數。stdarg.h 資料型別 型別名稱 描述 va list 用來儲存巨集va arg與巨集va end所需資訊 巨集名稱 描述va st...