Chinaunix
标题:
printf 实现
[打印本页]
作者:
darkce
时间:
2010-01-28 15:54
标题:
printf 实现
printf 函数实现,代码仅供参考
#include <stdarg.h>
/***
void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);
***/
void xPrintf(int LEVEL, const char* format, ...);
void xPrintf(int LEVEL, const char* format, ...)
{
va_list ap;
va_start(ap, format);
char buf[4096];
char *p = buf;
const char *f = format;
while (*f != '\0')
{
if (*f != '%')
{
*p++ = *f++;
continue;
}
++f;
int value;
char *pl;
char *pr;
char *tmp;
switch(*f++) {
case 'd':
value = va_arg(ap, int);
if (value < 0)
{
*p++ = '-';
value = ~value;
}
pl = p;
do {
*p++ = value%10+'0';
} while ((value /=10) > 0);
pr = p-1;
// swap
while(pr-pl > 0)
{
char t = *pl;
*pl = *pr;
*pr = t;
pl++; pr--;
}
break;
case 's':
tmp = va_arg(ap, char*);
while(*tmp != '\0')
{
*p++ = *tmp++;
}
break;
}
}
va_end(ap);
*p = '\0';
printf("%s\r\n", buf);
}
作者:
liexusong
时间:
2010-01-28 16:09
printf应该用到底层的东西吧!好像汇编等!
作者:
hellioncu
时间:
2010-01-28 16:25
应该说是可变参数的用法
作者:
darkce
时间:
2010-02-02 13:52
楼上说的极是..
作者:
prolj
时间:
2010-02-02 14:01
唉,lz去参与glibc的开发吧
作者:
c/unix
时间:
2010-02-02 15:37
提示:
作者被禁止或删除 内容自动屏蔽
作者:
shang2010
时间:
2010-02-02 20:04
我大学时候看的UNIX6的代码,
里面调用的是putchar, getchar更地层的调用,再下面才是汇编
,我说的printf是内核调用,跟库概念有点不同,
代码量大约200行
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2