- DataSets
- handswriting
皇太極科技有限公司
Hwang DynChi Inc.
2014年2月19日 星期三
2014年1月10日 星期五
2013年11月29日 星期五
2013年11月1日 星期五
[Development] 編程規範
- 政策
- 命名規則
- 不使用單一底線開頭的名稱
- macros只用類似 ONLY_UPPERCASE_NAME 這樣的名稱且不可用常用單字或縮寫(例如 template的 T)
- 可參考如下的命名習慣
- classes, functions, enums: LikeThis
- variables: likeThis
- private data member: m_likeThis
- marcos: LIKE_THIS
- 註釋
- 儘量以程式碼代替註釋(不要撰寫與程式碼重複地註釋, 容易不同步)
- 請寫說明性註釋, 解釋演算法原理與做法
- 編譯
- 以更高警告級別 compile, e.g. -Wall -Werror
- warning options可參考: gcc warning options
- 另外, 可能無法避免一些 include library的 warning message, 可用 pragma來 wrap, 不過, gcc似乎無法使用該方法, 參考: gcc wrap warning, windows上的做法可參考: 選擇性關閉 warning
- 設計風格
- 一次專注一件事, 每個 class或 function 應該都具有內聚力, 只完成單一任務
- 正確比快速好, 簡單比複雜好, 清晰比小巧玲瓏好, 安全比不安全好.
- Scalability
- 使用動態配置
- 了解個演算法複雜度
- 盡可能使用線性演算法
- Optimization
- 不要過早最佳化!!
- 隱藏資訊
- 絕對不要把 class的 member data設為 public 或釋出指向成員變數的 pointer或 handle
- Coding Style
- pass by reference
- 用 ++a, --a取代 a++, a--
- 善用 design patterns or idioms
- 將 global 與 shared的資料最少化
- 絕對不要在單一述句中配置一個以上的資源
- void Fun(shared_ptr<Widget> sp1, shared_ptr<Widget> sp2);
- // ...
- Fun(shared_ptr<Widget>(new Widget), shared_ptr<Widget>(new Widget));
- 例如以上範例, 若 compiler編譯順序為 new, new 再 constructor 兩次, 則在其中一個 constructor exception時造成 memory leak. 應改為
- shared_ptr<Widget> sp1 (new Widget), sp2(new Widget);
- Fun(sp1, sp2);
[Development] 公司開發工具
- 編程規範
- 自動編譯系統
- autoconf, automake
- CMake
- Test System
- GTest
- 版本控制系統 (version control)
- svn
- mercurial
- git
- 錯誤回報系統 (bug tracker)
- static code analysis
- CppCheck
- Resource repository
- 暫時先以 Dropbox取代
訂閱:
文章 (Atom)