星球 - 小技巧:#include "/dev/stdin"

作者:jserv | 來自:Jserv's blog | 2011/6/7 3:31:00
Susam Pal 有篇短文 [Compiler taking input while compiling] 提到一個非常有趣的技巧,就是在 C 語言程式中去 #include "/dev/stdin" (UNIX) 或 #include "CON" (Windows),這樣就能在編譯時期,接受標準輸入作為新增的程式碼。那麼,實際的應用呢?筆者想到一種應用型態,試想,有許多成功的 open source 專案長年累積眾多開發者或貢獻者,會期望在 UI 顯示這些份清單,可能的作法有兩個: 讀取某個文件檔,如 AUTHORS 透過 Makefile 的修改,在編譯時期指定 -DAUTHOR_LIST="..." 之類的編譯參數 前者看來很有彈性,但可能大題小作了,不過只是字串,有必要因此開檔嗎?又,萬一多個版本共存於同一個環境,該怎麼辦呢?後者麻煩了一些,但絕對會運作,但這又額外的風險,因為我們不確定這份清單到底有多長、shell 是否能處理過長的字串。更麻煩的是,因為是編譯參數的修改,make 無法清楚得知確切的編譯時間變動,無法確保最終的字串輸出,因為即使將 'AUTHORS' 一類的檔案放入 Makefile target 的相依清單中,還是有可能面臨產生 C-style string...