精華區beta CSSE 關於我們 聯絡資訊
reader大討論的議題很大 我就只回小一點的議題:p [恕刪] ※ 引述《reader (讀者)》之銘言: : 好像又離題了,總之,對於除錯這件事,我的結論是要用整體的觀點來做 : 系統化的有效管理,不要去依賴除錯工具,這樣我們將永遠也不能學會讓 : 程式碼寫得嚴謹。 這點我相當的贊同 : 至於如何有效閱讀程式碼,我的結論是,買高解析度的大螢幕才是正道, : 沒有任何軟體工具比得上大螢幕的巨大而直接的效用,我現在使用 19 吋 : TFT 螢幕,解析度 1280 * 1024, 用 proggy tiny 字型在 EditPlus 下 : 可以有超過 200 字元的寬度,超過 80 行的高度。 這個我反而不是很喜歡 以前覺得螢幕大,code應該一次看的比較多 但是當我使用17'LCD之後 我發現到其實看的code變多,其實並不會增加performance 因為資料量變多,search的時間相對也會變慢 人的眼睛能注意的東西是有限的,放那麼多code只會增加眼睛的overhead 目前採用vim的folding,跟註解技巧 他可以讓螢幕顯示該顯示,以及我想看到的東西就好 舉個例子, 假設我在改ls的code裡面一個叫做mastercmp的function 他是位於ls.c裡面的730行左右 當我利用folding改良之後 +--131 lines: 宣告跟include------------------------------------------------------- +---288 lines: int main(int argc, char *argv[])----------------------------------- +-- 69 lines: static void traverse(int argc, char *argv[], int options)----------- +--242 lines: static void display(FTSENT *p, FTSENT *list)------------------------ +-- 6 lines: mastercmp 的註解---------------------------------------------------- static int mastercmp(const FTSENT **a, const FTSENT **b) { int a_info, b_info; a_info = (*a)->fts_info; if (a_info == FTS_ERR) return (0); b_info = (*b)->fts_info; if (b_info == FTS_ERR) return (0); if (a_info == FTS_NS || b_info == FTS_NS) return (namecmp(*a, *b)); if (a_info != b_info && (*a)->fts_level == FTS_ROOTLEVEL && !f_listdir) { if (a_info == FTS_D) return (1); if (b_info == FTS_D) return (-1); } return (sortfcn(*a, *b)); } +-- 18 lines: static u_quad_t makenines(u_long n)--------------------------------- 注意到了嗎? 上述的只有30行的大小,但是他其實包含了780行的code 而且除了我正在改的function是詳細顯示之外 function其他就用一行帶過 但是其實在coding時,我也只需要那一行 input and output的資訊即可 善用這個技巧,我寫程式很少用page UP/DOWN的 因為再大的code我都只需要一到兩個畫面就可以完整顯示 : 並且我極用力地精減程式碼,使用大量的巨集和 inline function, 它們 : 基本上都可以寫在一行裡 (200 字元的寬度往往足夠寫下 10 行敘述), : 到最後幾乎所有模組,都在一兩個畫面中就完全呈現。 : 至此,我已不需要任何輔助工具,再怎樣也不會比眼睛一掃來得快,並且 : 區塊之間,也都會手動加上輔助用的、長短不一的區隔線,不同的長度有 : 不同的意思,並不會很容易看到眼花。 reader大可不可以show一下你的code 還蠻好奇長的什麼樣子的:p -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.207.173