有專門的宏,處理可變參
創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、無為網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5技術(shù)、商城系統(tǒng)網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站建設公司、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為無為等各大城市提供網(wǎng)站開發(fā)制作服務。
void va_start( va_list arg_ptr, prev_param );
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
一個簡單的例子
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;
}
可變參數(shù)是用于調(diào)用函數(shù)時,不知道參數(shù)的個數(shù)及類型的一種場合,最經(jīng)典最常用的是
int
printf(const
char
*format[,
argument,
...]);
它后面的參數(shù)類型及數(shù)量都是可變的
如
printf("%d",x);
//一個int參數(shù)
printf("%d%d%s\n",x,y,z);
//三個參數(shù),前兩個為int,后面的為char
*
如@psxf91所答,應使用v*系列的函數(shù)來實現(xiàn)。對比下printf與vprintf函數(shù)原型:
void?printf(const?char?*format,?...);
void?vprintf(const?char?*format,?va_list?ap);
可以看出二者的差別。vprintf才接收va_list類型,printf接收的是不定參數(shù)。
因此,要實現(xiàn)你的要求代碼如下:
#include?"stdarg.h"
void?fun(const?char?*fmt,?...){
va_list?ap;
va_start(ap,?fmt);
//?...
vprintf(fmt,?ap);
//?...
va_end(ap);
}
定義如下:
函數(shù)返回值 函數(shù)名(形參1, 形參2, ...)
舉例說明:
int??func(int?a,?int?b,?...)
{
//函數(shù)體
......
}
printf()函數(shù)就是一個參數(shù)可變的函數(shù),其函數(shù)原型為:
int?printf?(const?char?*__format,?...);