實現自己的printf函式

2021-06-26 22:31:51 字數 2203 閱讀 8234

在嵌入式開發中,常常會通過串列埠列印一些資訊到pc終端,這就需要實現自己的printf函式,下面介紹列印函式print的實現。

print.h

[cpp]view plain

copy

print?

#ifndef     __print_h_

#define    __print_h_

void

print(

char

* fmt, ...);  

void

printch(

char

ch);  

void

printdec(

intdec);  

void

printflt(

double

flt);  

void

printbin(

intbin);  

void

printhex(

inthex);  

void

printstr(

char

* str);  

#define console_print(ch)    putchar(ch)

#endif    /*#ifndef __print_h_*/

上面print函式為全功能的列印函式,可以實現類似printf的功能,printch實現單個字元的列印、printdec實現十進位制格式數字的列印,printflt實現浮點數的列印,printbin實現二進位制格式數字的列印,printhex實現十六進製制格式數字的列印,printstr實現字串的列印,console_print函式是串列埠單字元列印函式的巨集定義,這裡暫時用pc終端單字元列印函式putchar代替。在實際嵌入式環境下,替換成串列埠單字元列印函式即可。

print.c

[cpp]view plain

copy

print?

#include 

#include 

#include "print.h"

intmain(

void

)    

void

print(

char

* fmt, ...)  

pfmt++;  

}  else

}  va_end(vp);  

}  void

printch(

char

ch)  

void

printdec(

intdec)  

printdec(dec/10);  

printch( (char

)(dec%10 + 

'0'));  

}  void

printflt(

double

flt)  

void

printstr(

char

* str)  

}  void

printbin(

intbin)  

printbin(bin/2);  

printch( (char

)(bin%2 + 

'0'));  

}  void

printhex(

inthex)  

printhex(hex/16);  

if(hex < 10)  

else

}  編譯執行結果如下:

[cpp]view plain

copy

print?

print: c  

print: 1234567  

print: 1234567.123456  

print: string test  

print: 0b1001000110100010111111111  

print: 0xabcdef  

print: %  

如上所示,print函式實現了類似printf的功能。

[cpp]view plain

copy

print?

自己實現printf

原理不是很難網上有很多,自己搜一下就明白了。void printlog const char fmt,看到上面 太簡單了,也許有人會說,這有什麼用?在我看來最大的用處在於寫日誌,如果我們把 稍稍改下就可以把螢幕上的輸出一起輸出到檔案乙份 在初始化處把全域性變數日誌檔案開啟就像這樣 plogfile ...

實現自己的變參函式printf

在c c 標準庫中,變參函式很特別。printf,fprintf,sprintf等都屬於變參函式。如果自己要寫類似的引數可變的函式,通常會用到下面三個函式 include void va start va list ap,last type va arg va list ap,type void v...

自己實現乙個printf函式

在arm嵌入式開發環境中,串列埠一般使用arm pl011的uart實現,uart的實現原理就是實現了乙個8bits寬度,32深度的fifo,不停的往螢幕輸出乙個byte,乙個byte。這個就是硬體的實現,那麼軟體是怎麼實現列印 高階程式語言中定義的char,short,int,long,float...