引自http://www.zdnet.com.cn/developer/code/story/0,3800066897,39155056-2,00.htm
#include <stdarg.h>
intprintf(const char *fmt, ...)
{
const char *s;
int d;
char buf[16];
va_listap;
va_start(ap, fmt);
while (*fmt) {
if (*fmt != '%') {
putchar(*fmt++);
continue;
}
switch (*++fmt) {
case 's':
s = va_arg(ap, const char *);
for ( ; *s; s++) {
putchar(*s);
}
break;
case 'd':
d = va_arg(ap, int);
itoa(d, buf, 10);
for (s = buf; *s; s++) {
putchar(*s);
}
break;
/* Add other specifiers here... */
default:
putchar(*fmt);
break;
}
fmt++;
}
va_end(ap);
return 1; /* Dummy return value */
}
下面是一些值得注意的事情:
- 为了节省空间,这个简单的printf()只支持“%s”和“%d”格式的分类符,而不需要任何指示器或者其他调节器。扩展这个函数以支持其他分类符是相对较简单的。
- C语言的标准要求printf()应该返回输出字符串的数量。这个被返回的值通常被忽略掉了,所以这个轻型的printf()就不会劳心去计算它了,而是返回一个伪值。
- 一般来说,putchar()这个函数会将字符发送到串口,更通行的方法是通过由中断驱动的串口输出缓冲区以避免延迟。
- 首标文件<stdarg.h>是一个标准的库首标文件,它为访问传递给printf()的变量自变量列表提供小巧的宏,通常是通过系统堆栈。
posted on 2006-10-17 16:32
崔少伟 阅读(367)
评论(0) 编辑 收藏 引用 所属分类:
arm in linux