|
|
和printf相同具备可变参数的C51函数
|
来源:
|
关键是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); } } }
来源:中国电子技术信息网 (出处:赛尔电子技术中央)
(阅读次数:)
|
| 上一篇:MCS-51单片机实用子程序库(二) 下一篇:单片机接PS/2键盘的c51示例 |
|
[ 收藏]
[ 推荐]
[ 评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
| |
|
|
|