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和va_end所需資訊的一種型別。為了訪問變長引數列表中的引數,必須宣告va_list型別的乙個物件 定義: typedef char * va_list;
va_start:訪問變長引數列表中的引數之前使用的巨集,它初始化用va_list宣告的物件,初始化結果供巨集va_arg和va_end使用;
va_arg: 展開成乙個表示式的巨集,該表示式具有變長引數列表中下乙個引數的值和型別。每次呼叫va_arg都會修改用va_list宣告的物件,從而使該物件指向引數列表中的下乙個引數;
va_end:該巨集使程式能夠從變長引數列表用巨集va_start引用的函式中正常返回。
vaarg.c
#include #include #include /* ansi標準形式的宣告方式,括號內的省略號表示可選引數 */
int demo(char *msg, ...)
/* 將argp置為null */
va_end(argp);
return 0;
}void main(void)
注意事項:va_arg(argp, type)巨集中不支援的type:在c語言中,呼叫乙個不帶原型宣告的函式時,呼叫者會對每個引數執行「預設實際引數提公升—— char、signed char、unsigned char
—— short、unsigned short
—— signed short、short int、signed short int、unsigned short int
—— float
如果呼叫者傳入了上述type,會進行自動轉換
makefile:
cc = gcc
inc = ./
cflag += -g
.phony : all
%.o : %.c
$(cc) -c $(cflag) $^ -o $@
.phony : clean
clean :
rm -f .o
Linux12 深入引數
如果parameter不為空,就替換它的值,否則就替換為value。示例 donggua donggua desktop echo using editor using editor home donggua make 與 基本相同,區別是,當parameter為空時,不但使用value,而且把它賦...
可變引數函式
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...