⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printf.c

📁 Small Device C Compiler 面向Inter8051
💻 C
字号:
/** Simple printf implementation    Again a stub - will use the std one later...*/#include <stdarg.h>#include <stdio.h>#define STATIC/* PENDING */#define NULL	0STATIC void _printn(unsigned u, unsigned base, char issigned, volatile void (*emitter)(char, void *), void *pData){    const char *_hex = "0123456789ABCDEF";    if (issigned && ((int)u < 0)) {	(*emitter)('-', pData);	u = (unsigned)-((int)u);    }    if (u >= base)	_printn(u/base, base, 0, emitter, pData);    (*emitter)(_hex[u%base], pData);}STATIC void _printf(const char *format, volatile void (*emitter)(char, void *), void *pData, va_list va){    while (*format) {	if (*format == '%') {	    switch (*++format) {	    case 'c': {		char c = (char)va_arg(va, int);		(*emitter)(c, pData);		break;	    }	    case 'u':		{		    unsigned u = va_arg(va, unsigned);		    _printn(u, 10, 0, emitter, pData);		    break;		}	    case 'd':		{		    unsigned u = va_arg(va, unsigned);		    _printn(u, 10, 1, emitter, pData);		    break;		}	    case 'x':		{		    unsigned u = va_arg(va, unsigned);		    _printn(u, 16, 0, emitter, pData);		    break;		}	    case 's': 		{		    char *s = va_arg(va, char *);		    while (*s) {			(*emitter)(*s, pData);			s++;		    }		}	    }	}	else {	    (*emitter)(*format, pData);	}	format++;    }}void putchar(char c);STATIC void _char_emitter(char c, void *pData){    /* PENDING: Make the compiler happy. */    pData = 0;    putchar(c);}int printf(const char *format, ...){    va_list va;    va_start(va, format);    _printf(format, _char_emitter, NULL, va);    /* PENDING: What to return? */    return 0;}STATIC void _buf_emitter(char c, void *pData){  *((*((char **)pData)))++ = c;}int sprintf(char *pInto, const char *format, ...){    va_list va;    va_start(va, format);    _printf(format, _buf_emitter, &pInto, va);    *pInto++ = '\0';    /* PENDING: What to return? */    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -