变长参数:在宏定义中,...
表示接受可变数量的参数。它允许你在调用宏时传入任意数量的参数
#include <stdio.h>
#include <stdarg.h>
#define AP_DEBUG 1
#if AP_DEBUG == 1
void SendInfor(const char *format,...);
#define APrint(...) SendInfor(__VA_ARGS__)
#else
#define APrint(...)
#endif
#define FILL_DATA_LEN 256
static char StringBuf[FILL_DATA_LEN];
void SendInfor(const char *format,...)
{
va_list vl;
int b;
short wLength;
char *sp=StringBuf;
va_start(vl,format);
while(*format != '\0')
{
if(*format != '%')
{
b=sprintf(sp, "%c", *format++);
sp+=b;
}
else
{
switch(*++format)
{
case 'c': b=sprintf(sp, "%c", va_arg(vl,char));
format++;
sp+=b;
break;
case 's':
b=sprintf(sp, "%s", va_arg(vl,char*));
format++;
sp+=b;
break;
case 'd':
b=sprintf(sp, "%d", va_arg(vl,int));
format++;
sp+=b;
break;
case 'x':
case 'X':
b=sprintf(sp, "%X", va_arg(vl,int));
format++;
sp+=b;
break;
case 'f':
b=sprintf(sp, "%f", va_arg(vl,double));
format++;
sp+=b;
break;
case 'l': if( *(++format)=='d' )
{
b=sprintf(sp, "%ld", va_arg(vl,double));
format++;
sp+=b;
}
break;
default:
b=sprintf(sp,"%c", *format++);
sp+=b;
break;
}
}
}
va_end(vl);
wLength=((short)sp-(short)StringBuf);
printf("StringBuf:%s\r\n",StringBuf);
printf("StringBuf len:%d\r\n",wLength);
}
int main()
{
APrint("hello");
return 0;
}