extern int verbose;
#define dbg(...) xlog(4, "dbg", __va_args__)
#define info(...) xlog(3, "inf", __va_args__)
#define wrn(...) xlog(2, "wrn", __va_args__)
#define err(...) xlog(1, "err", __va_args__)
#define out(...) xlog(0, "out", __va_args__)
#define xlog(level, log_level, ...) \
do;\
time(&_tm);\
localtime_r(&_tm, &log_tm);\
fprintf(stdout, "%4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d %3s | ", log_tm.tm_year+1900, log_tm.tm_mon+1, log_tm.tm_mday, log_tm.tm_hour, log_tm.tm_min, log_tm.tm_sec, log_level);\
fprintf(stdout, __va_args__);}\
}\}while(0)
verbose是全域性變數,用來限制輸出等級,小於此等級的資訊會被輸出,例如,如果verbose = 4,則全部資訊都會輸出,如果verbose = 3,則dbg資訊不會輸出。
使用方法同printf,只是把printf替換為dbg、info等。
dbg("abcdefg%d.\n", a);
這是乙個非常簡化版的,並且只能輸出到螢幕,只需要將其加到.h檔案就可以使用。
另乙個版本需要.c和.h,使用也更複雜:
手寫乙個簡化版Tomcat
我們啟動tomcat時雙擊的startup.bat檔案的主要作用是找到catalina.bat,並且把引數傳遞給它,而catalina.bat中有這樣一段話 bootstrap.class是整個tomcat 的入口,我們在tomcat原始碼裡找到這個類,其中就有我們經常使用的main方法 這個類有兩...
Redux自己手寫乙個簡化版全面的redux
import react from react const renderscreen screen const renderbutton button 1.全域性渲染方法 渲染螢幕 renderscreen state.screen 渲染按鈕 renderbutton state.button 2....
如何實現乙個簡化版的 jQuery
對於操作dom來說,jquery是非常方便的乙個庫,雖然如今隨著react,vue之類框架的流行,jquery用得越來越少了,但是其中很多思想還是非常值得我們學習的,這篇文章將介紹如何從零開始實現乙個簡化版jquery。在這裡,我把這個庫命名為 clus class 的諧音 下面以 符號代替。首先需...