va_list
//compile:gcc va_arg.c
//run://a.out
如果遇到//notes:char检索,type将被指示使用int,如果应该使用char .传递时将被提升为int。 这里使用的编译器是Linux下的gcc
#包含
#包含
#define filename 'filemark '
/*****踏实的咖啡豆/p#definedebug_skdm_jiayu () fooyu ) )。
void debug _ (常数char * format,)
{
va_list thethis;
va_Start(thethis,format ); //可变参数获取可变部分的起始地址
file * FP=fopen (文件名称,' a '; //打开文件,新文件不存在
if(null==FP )返回;
vfprintf(FP,format,thethis ); //写文件,这可以处理va_list
流量(FP ); //关闭文件
va_end(thethis );
}
/******踏实的咖啡豆/p typedef char byte;
void write _ byte (常数,…)
{
va_list args; //char*args;
va_start(Args,cnt ); //(args=(va_list ) ) cnt ) _intsizeof );
int i=0;
for (; I
{
//评论升级为int
bytet=va_arg(args,int ); //char:int
printf(%c(n ),t );
}
VA_end(ARGS ); //(args=) va_list )0);
}
/******踏实的咖啡豆/Pvoidwrite_str(constintCNT,) ) ) ) )。
{
va_list args; //char*args;
va_start(Args,cnt ); //(args=(va_list ) ) cnt ) _intsizeof );
int i=0;
for (; I
{
char*c=va_arg(args,char*; //char*:char坚实的咖啡豆/Pprintf(%d=%s(n ),I,c );
}
VA_end(ARGS ); //(args=) va_list )0);
}
/******踏实的咖啡豆/Pvoidwrite_dif(constcharc,) ) ) ) ) )。
{
va_list args; //char*args;
VA_start(Args,c ); //(args=(va_list ) ) cnt ) _intsizeof );
int i=0;
intCNT=va_arg(args,int );
if(c=='c ' ) ) ) )。
for(I=0; I
{
charcc=va_arg(args,int ); char :当传递int函数时,char将提升为int
printf('%d=%cn ),I,cc );
}
elseif(c=='s ' ) )。
for(I=0; I
{
char*s=va_arg(args,char*; //char*:char坚实的咖啡豆/Pprintf(%d=%s(n ),I,s );
}
elseif(c=='d ' ) ) ) )。
for(I=0; I
{
intdt=va_arg(args,int ); //int:int
printf () %d=%dn ),I,dt );
}
电子打印(wrong parameter (n ) );
VA_end(ARGS ); //(args=) va_list )0);
}
/*****踏实的咖啡豆/Pintmain(IntArgc,char*argv俊逸的汽车) ) ) ) ) ) )。
{
printf(.##__va_args__宏*********n );
debug _ (' oneparameterloading .n ' );
debug _ (' % d参数加载.n ',2;
DEBUG_('%d patameter %s.n ',3,' loading ' );
保存文件:文件标记(printf ) (n % s ),
' youcouldcheckitfromusingshell' catfilemark' inlinuxsystemn ' );
//查看shell命令
//cat文件标记
printf ((如果遇到n notes : char检索,type将使用int,如果应该使用char,则提示.在传输时提升为int。 这里使用的编译器是Linux下的gccn ';
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *踏实的咖啡豆/pprintf('.va_list3360ching
wite_byte(0;
write_byte(4,' m ',' a ',' r ',' k ' );
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *坚实的咖啡豆/pprintf('.va_list3333
write_str(0;
wite_str(2,' mystr ',' strend ' );
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *坚实的咖啡豆/pprintf('.va_list3333
printf (char * * * * * * * * * * * * * * * * * * * * * * * * *n ' );
wite_dif('c ',2,' o ',' k ' );
printf (string * * * * * * * * * * * * * * * * * * * * * * * * *
write_dif(s、3、this、is、字符串);
printf (int * * * * * * * * * * * * * * * * * * * * * * * * * * *
wite_dif(d )、4、1、2、5、8 );
printf (wrong mark * * * * * * * * * * * * * * * * * * * * * *n );
write_dif(w、2、w、string );
返回0;
}
. ##__VA_ARGS__宏********坚实的咖啡豆/p save in file :filemark
youcouldcheckitfromusingshell ' catfilemark ' inlinuxsystem
如果Notes:遇到获取char,则type表示使用int;如果应该使用char,则表示在.传输时将提升为int。 这里使用的编译器是Linux下的gcc
. va_list:char***********坚实的咖啡豆/p m
a
r
K
. va_list:string*********坚实的咖啡豆/p 0=mystr
1=趋势
. va_list:char,string,int坚实的咖啡豆/p char * * * * * * * * * * * * * * * * * *坚实的咖啡豆/p 0=o
1=k
string***************坚实的咖啡豆/p 0=this
1=is
2=字符串
int*****踏实的咖啡豆/p 0=1
1=2
2=5
3=8
wrong mark****************坚实的咖啡豆/p wrong parameter
执行一次文件后的结果【shell:catfilemark】:
oneparameterloading .2parameter loading .3patameter loading .