原理不是很難網上有很多,自己搜一下就明白了。
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...