發表文章

目前顯示的是 4月, 2013的文章

想要執行時期再決定log 是否輸出的功能該怎麼辦?

一般來說,工程師會在開發階段儘量把工作流程用log 的方式顯示到console,最常用的就是printf(),以利 debug. 等到build release 後,再把log 關掉. 最早最笨的方法,就是build release 的時候,工程師一行一行的把程式碼砍掉,然後編譯.恩,這的確非常的原始. 後來經過演化,工程師學會了使用Macro的方式來開啟跟關閉log.然後再編譯的時候定義不同的Macro define 來build出有log的版本或沒有log的版本.所以我們常常就會看到很多 #ifdef DEBUG ... ... #else ... ... #endif 恩,這的確可以在地球上存活. 不過我需要一個特別的功能,在程式執行的時候才決定log 是否要輸出.最常遇到的需求就是使用者可以用不同的命令列參數開啟或關閉log.最直覺的方法就是stdout重新導向,這也是一個好方法,不過還有一個方法可以提供給大家. int (*run_log)( const char* format, ...); int my_log( const char* format, ...); int my_log( const char* format, ...) {     return 0; } int main(int argc,char** argv) {     if(argc > 1 && strcmp(argv[1],"debug") == 0)         run_log = printf;     else         run_log = my_log;     run_log("log start\n"); } 這樣,使用者可以執行時帶入debug 命令列參數來開啟log