關於printf的實現,想必看過我之前發表的文章的伙伴們已經了解了不少基本的知識。好了,接下來不多說了,直接上源碼,看看一種簡單的實現方式:
#include運行結果:#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 ; }