关于printf的实现,想必看过我之前发表的文章的伙伴们已经了解了不少基本的知识。好了,接下来不多说了,直接上源码,看看一种简单的实现方式:
#include <stdio.h> #define myfflush(out) do {} while (0) typedef int uint32_t; //输出十进制数 static void print_Dec (uint32_t n) { if (n >= 10) { //递归调用 print_Dec(n / 10); n %= 10; } putchar((char)(n + '0')); } //输出十六进制数 static void print_Hex(unsigned int hex) { int i = 8; putchar('0'); putchar('x'); while (i--) { unsigned char c = (hex & 0xF0000000) >> 28; putchar(c < 0xa ? c + '0' : c - 0xa + 'a'); hex <<= 4; } } //输出字符串 void print_String(const char *s) { while (*s) { putchar(*s); s++; } } //输出字符 void print_char(char ch) { putchar(ch); } typedef unsigned long volatile ulv ; typedef unsigned long ul ; int main(void) { //输出10进制数 print_Dec(10); putchar('\n'); //输出16进制数 print_Hex(0xa); putchar('\n'); //输出字符串 print_String("hello world"); myfflush(stdout); return 0 ; }
运行结果: