需要借用C語言的VA_LIST?宏定義,及相關操作來實現可變參數。
網站的建設成都創新互聯專注網站定制,經驗豐富,不做模板,主營網站定制開發.小程序定制開發,H5頁面制作!給你煥然一新的設計體驗!已為成都柔性防護網等企業提供專業服務。
VA_LIST?所在頭文件:#include stdarg.h,用法如下:
(1)首先在函數里定義一具VA_LIST型的變量,這個變量是指向參數的指針;
(2)然后用VA_START宏初始化剛定義的VA_LIST變量;
(3)然后用VA_ARG返回可變的參數,VA_ARG的第二個參數是你要返回的參數的類型(如果函數有多個可變參數的,依次調用VA_ARG獲取各個參數);
(4)最后用VA_END宏結束可變參數的獲取。
以下是一個自定義打印接口的實現:
int?my_printf(const?char?*fmt,?...)//...表示參數可變
{
va_list?args;//定義va_list
static?char?gc_PrintfOutBuff[1000];
va_start(args,?fmt);//初始化
vsnprintf((char?*)?gc_PrintfOutBuff,?1000,?(char?*)?fmt,?args);//這里沒有使用VA_ARG取回單個變量,而是借用vsnprinf一次性讀取。
va_end(args);//結束獲取
puts("%s",(const?char?*)gc_PrintfOutBuff);//使用。
return?0;
}
你是指參數的個數可以變化? 比如文件操作函數fpritnf,它的參數是不確定的,可以是fprintf("%s%s","你好","他好");也可以是fprintf("%s%d%c","字符串",10086,'c'); 如果自己寫一個參數變化的函數的話,呵呵,我沒試過。
#include?stdarg.h??????????//可變參數函數必要的頭文件
#include?stdio.h
long?int?sum(unsigned?int?argc,...)????//可變參數函數必須包含至少一個確定的參數
{
long?int?srt=0;
int?va;
unsigned?int?i;
va_list?vl;????????????????????????//用于指向可變參數列表
va_start(vl,argc);?????????????????//初始化,va_start()調用的第一個參數是所編寫的可變參數函數的最后一個確定的參數
for?(i?=?0;?iargc;?i++)?{
srt+=(int)va_arg(vl,int);??????//從參數列表按提取一個int類型的值參與相加運算
}
va_end(vl);????????????????????????//清理
return?srt;
}
int?main(int?argc,?char*?argv[])
{
printf("%ld\n",sum(3,1,2,3));
return?0;
}
定義如下:
函數返回值 函數名(形參1, 形參2, ...)
舉例說明:
int??func(int?a,?int?b,?...)
{
//函數體
......
}
printf()函數就是一個參數可變的函數,其函數原型為:
int?printf?(const?char?*__format,?...);
網站題目:c語言可變參數函數的方法 c 可變參數函數
文章起源:http://m.2m8n56k.cn/article26/ddgdocg.html
成都網站建設公司_創新互聯,為您提供網站制作、移動網站建設、網站導航、建站公司、Google、定制開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯