printf函数变长参数处理

变长参数:在宏定义中,... 表示接受可变数量的参数。它允许你在调用宏时传入任意数量的参数

#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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值