单片机
返回首页

C语言可变参数函数使用总结

2013-05-13 来源:21IC

//ADS1.2下编译使用

void TestFun(char* fmt,...)

{

int ch;

char selch = 0;

va_list ap = NULL;

va_start(ap, fmt);

do

{

selch = *fmt;

if (selch!=\'%\')

{

putchar(*fmt);

}

else

{

selch = *++fmt;

switch(selch)

{

case \'c\':

ch = va_arg(ap, int);

printf("%c",ch);

break;

case \'d\':

ch = va_arg(ap,int);

printf("%d",ch);

break;

case \'x\':

ch = va_arg(ap, int);

printf("%#x",ch);

break;

}

}

++fmt;

}while(*fmt!=\'\');

va_end(ap);

}

//调用

TestFun((char*)"this is %d,%c,%x",1234,\'6\',0x12345);

//WIN-TC编译通过

#i nclude

/************************************************************

typedef void *va_list;

#define va_start(ap, parmN) (ap = ...)

#define va_arg(ap, type) (*((type *)(ap))++)

#define va_end(ap)

***************************************************/

void TestFun(cosnt char* fmt,...)

{

int ch;

long i32value = 0;

char selch = 0;

va_list ap = 0;

va_start(ap, fmt);

do

{

selch = *fmt;

if (selch!=\'%\')

{

putch(*fmt);

}

else

{

selch = *++fmt;

switch(selch)

{

case \'c\':

ch = va_arg(ap, int);

printf("%c",ch);

break;

case \'d\':

ch = va_arg(ap,int);

printf("%d",ch);

break;

case \'x\':

ch = va_arg(ap, int);

printf("%#x",ch);

break;

case \'l\':

if(*++fmt== \'d\')

{

i32value = va_arg(ap, long);

printf("%ld",i32value);

}

else

{

putch(\'l\');

if(*fmt!=0)

{

putch(*fmt);

}

}

break;

default:

break;

}

}

++fmt;

}while(*fmt!=\'\');

va_end(ap);

}

void main(void)

{

TestFun("this is %d,%c,%x,%ld",1234,\'6\',0x2345,(long)12345678);

getch();

}

void main(void)

{

TestFun("this is %d,%c,%x,%ld",1234,(char)\'6\',0x2345,(long)12345678);

getch();

}

上述的example使用宏定义, var_start(ap, pareN),var_arg(ap,type),var_end(ap).

var_start(ap, pareN) //是ap指向第一个变参.

var_arg(ap,type),//返回变参的实际值.

var_end(ap).//是ap指向空指针.

具体的实现,在不同的编译环境下有所不同.

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

最新器件
精选电路图
  • 光控音效发生器电路

  • 非常简单的150W功放电路图

  • 一个简单的警笛电路图

  • 基于IC555的可变PWM振荡器电路

  • 分享一个电网倾角计电路

  • 电谐波图形均衡器示意图

    相关电子头条文章