有專門(mén)的宏,處理可變參
員工經(jīng)過(guò)長(zhǎng)期磨合與沉淀,具備了協(xié)作精神,得以通過(guò)團(tuán)隊(duì)的力量開(kāi)發(fā)出優(yōu)質(zhì)的產(chǎn)品。創(chuàng)新互聯(lián)建站堅(jiān)持“專注、創(chuàng)新、易用”的產(chǎn)品理念,因?yàn)椤皩W⑺詫I(yè)、創(chuàng)新互聯(lián)網(wǎng)站所以易用所以簡(jiǎn)單”。公司專注于為企業(yè)提供網(wǎng)站制作、成都網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、電商網(wǎng)站開(kāi)發(fā),小程序開(kāi)發(fā),軟件定制網(wǎng)站等一站式互聯(lián)網(wǎng)企業(yè)服務(wù)。
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
一個(gè)簡(jiǎn)單的例子
void?simple_va_fun(int?i,?...)
{
va_list?arg_ptr;
int?j=0;
va_start(arg_ptr,?i);
j=va_arg(arg_ptr,?int);
va_end(arg_ptr);
printf("i=%d?j=%d\bn",?i,?j);
return;
}
int?main()
{
simple_va_fun(1);
simple_va_fun(1,2);
simple_va_fun(1,200);
return?0;
}
需要借用C語(yǔ)言的VA_LIST 宏定義,及相關(guān)操作來(lái)實(shí)現(xiàn)可變參數(shù)。VA_LIST 所在頭文件:#include stdarg.h,用法如下:(1)首先在函數(shù)里定義一具VA_LIST型的變量,這個(gè)變量是指向參數(shù)的指針;(2)然后用VA_START宏初始化剛定義的VA_LIST變量;(3)然后用VA_ARG返回可變的參數(shù),VA_ARG的第二個(gè)參數(shù)是你要返回的參數(shù)的類型(如果函數(shù)有多個(gè)可變參數(shù)的,依次調(diào)用VA_ARG獲取各個(gè)參數(shù));(4)最后用VA_END宏結(jié)束可變參數(shù)的獲取。以下是一個(gè)自定義打印接口的實(shí)現(xiàn):pre t="code" l="cpp"int my_printf(const char *fmt, )//表示參數(shù)可變
{
va_list args;//定義va_list
static char gc_PrintfOutBuff[1000];
va_start(args, fmt);//初始化
vsnprintf((char *) gc_PrintfOutBuff, 1000, (char *) fmt, args);//這里沒(méi)有使用VA_ARG取回單個(gè)變量,而是借用vsnprinf一次性讀取。
va_end(args);//結(jié)束獲取
puts("%s",(const char *)gc_PrintfOutBuff);//使用。
return 0;
}
__VA_ARGS__ 是一個(gè)可變參數(shù)的宏,這個(gè)可變參數(shù)的宏是新的C99規(guī)范中新增的。
GCC、VC2005開(kāi)始支持。
#define CALCSUM(v, ...)? ?sum(v, __VA_ARGS__)
int sum(int num_args, ...)
{
int val = 0;
va_list ap;
int i;
va_start(ap, num_args);
for (i = 0; i num_args; i++)
{
val += va_arg(ap, int);
}
va_end(ap);
return val;
}
int main(void)
{
printf("10、20 和 30 的和 = %d\n", CALCSUM(3, 10, 20, 30));
printf("4、20、25 和 30 的和 = %d\n", CALCSUM(4, 4, 20, 25, 30));
return 0;
}