网站首页
|
技术文章
|
解决方案
|
电子书籍
|
下载中心
|
电子商城
|
技术论坛
|
电子博客
|
商务信息
联系站长
加入收藏
会员登陆
交易首页
:
最新信息
-
推荐信息
-
热门信息
-
免费发布
-
行业新闻
-
行业资讯
-
行业知识
-
积分说明
-
信息分类
-
企业展示
-
帮助
您的位置:
中国电子设计
>>
技术文章
>>
微控制器
>> 正文
商务信息栏目开通公告 [2008-05-19 11:47:00]
□
和printf一样具有可变参数的C51函数
热
和printf一样具有可变参数的C51函数
[作者:未知 转贴自:中国电子技术信息 点击数: 更新时间:2005-8-20
【字体:
A
】
关键是stdarg.h中的几个宏:va_start、va_arg和va_end,下面是一个简化版本的printf(),请参考:
#include "stdio.h"
#include "stdarg.h"
int printf (const char *format, ...)
{
static const char hex[] = "0123456789ABCDEF";
char format_flag;
unsigned int u_val, div_val, base;
char *ptr;
va_list ap;
va_start (ap, format);
for (;;) /* Until full format string read */
{
while ((format_flag = *format++) != '%') /* Until '%' or '\0' */
{
if (!format_flag)
{
va_end (ap);
return (0);
}
putchar (format_flag);
}
switch (format_flag = *format++)
{
case 'c':
format_flag = va_arg(ap, int);
default:
putchar (format_flag);
continue;
case 's':
ptr = va_arg(ap,char *);
while (format_flag = *ptr++)
{
putchar (format_flag);
}
continue;
case 'o':
base = 8;
if (sizeof(int) == 2)
div_val = 0x8000;
else
div_val = 0xC0000000;
goto CONVERSION_LOOP;
case 'd':
base = 10;
if (sizeof(int) == 2)
div_val = 10000;
else
div_val = 1000000000;
goto CONVERSION_LOOP;
case 'x':
base = 16;
if (sizeof(int) == 2)
div_val = 0x1000;
else
div_val = 0x10000000;
CONVERSION_LOOP:
u_val = va_arg(ap,int);
if (format_flag == 'd')
{
if (((int)u_val) < 0)
{
u_val = - u_val;
putchar ('-');
}
while (div_val > 1 && div_val > u_val)
{
div_val /= 10;
}
}
do
{
putchar (hex[u_val / div_val]);
u_val %= div_val;
div_val /= base;
}
while (div_val);
}
}
}
上一篇文章:
TMS320C6201/6701 DSP处理器与FLASH存储器的接口设计
下一篇文章:
KEIL C51 编译器(V6)简介
Web
www.cediy.com
发表评论
□
告诉好友
□
打印此文
□
关闭窗口
最新热点文章
基于单片机和串行总线技术的热量表...
数字温度传感器详解
用AD8302实现RF/IF幅度和相位测量系...
一种简单的10MHz频率源兼分配放大器...
维氏电桥振荡器
检验液晶显示器的简易测试仪
最新推荐文章
基于TMS320C6713与PC机的PCI总线高...
基于TMS320VC5409和Cygnal单片机构...
基于ARM控制器S3C44B0x的给煤机控制...
基于USB 2.0的高速数据采集卡在虚拟...
大功率谐振过渡软开关技术变频器研...
大功率谐振过渡软开关技术变频器研...
相 关 文 章
◇
网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
设为首页
加入收藏
关于本站
版权申明
联系站长
宣传赚点
友情链接
业务咨询QQ:
342488946
Copyright© 2004-2010
CEDIY.COM
.All Rights Reserved
粤ICP备05119258号