自己實現printf

2021-07-04 21:31:21 字數 1236 閱讀 7368

原理不是很難網上有很多,自己搜一下就明白了。

void printlog (const char *fmt,	...)

看到上面**太簡單了,也許有人會說,這有什麼用?

在我看來最大的用處在於寫日誌,如果我們把**稍稍改下就可以把螢幕上的輸出一起輸出到檔案乙份:

在初始化處把全域性變數日誌檔案開啟就像這樣:

plogfile = fopen("logfile.txt", "w");

if (null == plogfile)

然後稍稍修改下自己的print:

void printlog (const char *fmt,	...)

va_end(ap);

}

最後在反初始化的時候關掉檔案控制代碼:

if (null != plogfile)

乙個簡單的列印日誌就ok了。

稍微變動一下初始化的地方,把每天的日誌寫進乙個檔案:

time_t rawtime;

struct tm * timeinfo;

char logfilename[100];

time ( &rawtime );

timeinfo = localtime ( &rawtime );

printf ( "\007the current date/time is: %s", asctime (timeinfo) );

sprintf(logfilename, "log_%d_%d", timeinfo->tm_mon + 1, timeinfo->tm_mday);

plogfile = fopen(logfilename, "a+");

printlog("------------log-%s-begin---------------\n", asctime (timeinfo));

if (null == plogfile)

然後在反初始化的時候:

printlog("---------------------------------------------\n\n\n");

if (null != plogfile)

這樣同一天的日誌降列印到同乙個檔案中去,並且每次的日誌會有時間隔開。

實現自己的printf函式

在嵌入式開發中,常常會通過串列埠列印一些資訊到pc終端,這就需要實現自己的printf函式,下面介紹列印函式print的實現。print.h cpp view plain copy print?ifndef print h define print h void print char fmt,voi...

實現自己的變參函式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...