• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            編碼規范

            Posted on 2010-09-13 19:04 S.l.e!ep.¢% 閱讀(4053) 評論(1)  編輯 收藏 引用 所屬分類: Team
            本文參考資料:
            原版:http://1code.codeplex.com/releases/view/51868#DownloadId=148423
            譯版:http://1codechs.codeplex.com/releases/view/51227#DownloadId=148734


            原則:
            (1) 團隊風格統一,明確規則,提高可讀性

            1. 字符串類問題

            std::wstring
            std::string
            tstring(TCHAR版本的std::string)

            TCHAR
            char*
            wchar*

            char[]
            wchar[]

            LPCTSTR
            LPTSTR

            xxstring(自己封裝的string類)

            其它庫的 string

            ""
            L""
            _T("")

            Format() 問題

            無論采用哪種string, 是否采用UNICODE,都要規定好;
            ??
            2. 宏命名規范
            1. 所有字母大寫
            2. 單詞之間用_分隔

            3. BOOL 還是 bool?
            ?? TRUE or true?? FALSE or true?

            4.名字空間濫用?
            1. 一個Project只需要一個NameSpace 或 ProjectName.io.xxxxx 的形式

            5. 代碼跨平臺兼容?

            6. API函數前面的 :: ?
            1. 用于區分系統API函數與本地函數

            7. 函數命名?
            1. 采用 "動"+"賓"結構,
            2. Is + 動 + 賓 結構
            3. 意思明確,無歧義

            8. 濫用第三方庫?

            9. 當 if 里只有一條語句時?
            if(xxxxxxx)
            ??? 語句;
            or
            if(xxxxxxx)
            {
            ??? 語句;
            }

            10. 函數的參數安全性判斷 與 多重判斷 帶來的性能負累?
            A函數與B函數有著一樣的參數
            A函數調用B函數
            結果 A函數對所有參數進行了安全性的判斷
            A函數調用B函數時,又重復作了安全性的判斷

            11. 注釋規范?
            1. 文件頭注釋?
            2. 函數注釋?
            3. 函數內注釋?

            12. 所有返回值都需要處理,即使你不想理它,也要給它加上 UNREFERENCED_PARAMETER 宏
            #define UNREFERENCED_PARAMETER(P) (P)

            13. 每個函數都會有執行失敗的時候(雖然它可能失敗的機率是萬分之一)但也請小心處理它

            14. 關于其它命名空間里函數的用法?
            #include <vector>
            using namespace std;

            vector<int> vecTest;

            or

            #include <vector>
            std::vector<int> vecTest;

            1. 不要在頭文件中直接使用 using,特別是 using namespace , 這樣別人在引用這個頭文件時,會出現“名字污染”,可能涉及整個工程
            2. 如果非要使用 using ,在名字空間中使用,這樣不用影響到整個工程


            15. 類與類之間的依賴?
            如:
            ProjectName::io::CDir? 依賴于? ProjectName::io::CFile
            ProjectName::io::CFile 依賴于? ProjectName::util::CString

            同個項目中,類與類之間的依賴是可以理解的,但當某天我想用這個Project中的某個類時,依賴的文件太多,不容易單獨抽出來使用

            16. C++代碼中是否應該使用 goto?

            17. 模板中的 typename or class?
            統一采用 typename

            18. delete or delete[] ?
            如: char* p = new char[255];
            ??? delete p;
            還是
            ??? char* p = new char[255];
            ??? delete[] p;
            ??? ?

            19. stringstream or sprintf ?

            20. 0 或 NULL?

            21. CTime or time_t?

            22. UINT32 or unsigned int?

            23. 設計模式的濫用?
            為了防止設計模式的濫用,未清楚設計模式的意圖前,別用它

            24. 所有的變量都必須賦予初始值。

            25. 關于注釋,注釋形式不限,但
            ?? (1)每個函數至少要有簡要的注釋;
            ?? (2)每個參數都要說明其用途


            26. int* pValue or int *pValue ?

            27. if( NULL != p??) or if ( p != NULL??) ?

            28. x, y, or width, height?

            29. x = (xxx*)y;? or x = dynamic_cast<xxx*>(y) ?
            --- 使用后者,因為后者會進行類型判斷,如果不一致會拋出異常
            vc6.0要支持向下轉型要加入GR開關,而這在vc6.0z中是默認關閉的

            30. 采用最直觀的方式寫代碼

            31. 語句太長?
            寫法1:
            00235???? const char *opname =
            00236???????? (op==PJ_ICE_STRANS_OP_INIT? "initialization" :
            00237???????????? (op==PJ_ICE_STRANS_OP_NEGOTIATION ? "negotiation" : "unknown_op"));

            寫法2:
            00297???????? CHECK( pj_dns_resolver_create(&icedemo.cp.factory,
            00298????????????????????????????????????????????????????????????? "resolver",
            00299????????????????????????????????????????????????????????????? 0,
            00300????????????????????????????????????????????????????????????? icedemo.ice_cfg.stun_cfg.timer_heap,
            00301???????????????????????????????????????????????????????????? ?icedemo.ice_cfg.stun_cfg.ioqueue,
            00302???????????????????????????????????????????????????????????? &icedemo.ice_cfg.resolver) );

            寫法3:
            00397???? /* create the instance */
            00398???? status = pj_ice_strans_create("icedemo",???????????????????? /* object name? */
            00399????????????????????????????????????????????????? &icedemo.ice_cfg,???????? /* settings???? */
            00400????????????????????????????????????????????????? icedemo.opt.comp_cnt,? /* comp_cnt???? */
            00401????????????????????????????????????????????????? NULL,????????????????????????? /* user data??? */
            00402????????????????????????????????????????????????? &icecb,???????????????????????? /* callback???? */
            00403???????????????????????????????????????????????? &icedemo.icest)???????????? /* instance ptr */
            00404???????????????????????????????????????????????? ;

            寫法4:
            00442???? pj_ice_sess_role role = (pj_tolower((pj_uint8_t)rolechar)=='o' ?
            00443???????????????????????????????????????????????? ?PJ_ICE_SESS_ROLE_CONTROLLING :
            00444????????????????????????????????????????????????? PJ_ICE_SESS_ROLE_CONTROLLED);


            寫法5:
            00493 #define PRINT(fmt, arg0, arg1, arg2, arg3, arg4, arg5)????? \
            00494 ??????????? printed = pj_ansi_snprintf(p, maxlen - (p-buffer),? \
            00495?????????????fmt, arg0, arg1, arg2, arg3, arg4, arg5); \
            00496 ??????????? if (printed <= 0) return -PJ_ETOOSMALL; \
            00497 ??????????? p += printed

            32. 當 if 語句的只有一條語句時,哪種寫法更好?
            (1)? if(xxxx)
            ????? {
            ???????????? xxxxx;
            ????? }
            (2) if(xxxx)
            ??????????? xxxxxx;


            -----------------------------------------------------------------------------
            1. 概覽
            1.1. 原則和主旨
            高質量代碼有如下特質:
            (1) 可讀性,簡單明確, 注釋清楚,突出重點, 示例代碼
            (2) 一致性, 代碼風格統一
            (3) 正確性, 經過單元測試,pc-lint檢測, 符合文檔描術要求
            (4) 安全性


            2.1. 類名以C開頭
            ??
            (1)普通類采用 Cxxx 形式?
            ????? 例: CSimple
            ?? (2)模板類采用 CxxxT 形式?
            ????? 例: CSmartPointorT

            2.2. 接口類使用I開頭
            ??? (1)接口類指純虛類
            ??? (2)采用 Ixxx 形式
            ????? 例: ILoggable

            2.3. 枚舉類型命名
            ??? (1)所有字母大寫
            ??? (2)以 ENUM_ 開頭
            ??? (3)每個單詞之間盡量用_分隔
            ??? (4)具體的值不需要 ENUM_ 開頭
            ??? 例:enum ENUM_DWMNCRENDERINGPOLICY
            ??????? {
            ??????????? DWMNCRP_USE_WINDOWS_TYLE,
            ??????????? DWMNCRP_DISABLED,
            ??????????? DWMNCRP_ENABLED,
            ??????????? DWMNCRP_LAST
            ??????? };

            2.4. 函數指針類型命名
            ??? (1)所有字母大寫
            ??? (2)采用 FN_函數名_TYPE 的形式
            ?? 例:
            typedef HRESULT (WINAPI *FN_DWMSETWINDOWATTRIBUTE_TYPE)(HWND hwnd, DWORD dwAttribute, LPCVOID pvAttribute, DWORD cbAttribute);

            2.5. 函數指針命名
            ??? (1) 采用 pfn函數名 的形式
            ??? 例:FN_DWMSETWINDOWATTRIBUTE_TYPE pfnDwmSetWindowAttribute = NULL;

            名字縮寫規范:
            Manager = Mgr
            Message = Msg
            asynchronous = asyn
            event = evt
            object = obj
            volume = vol
            project = prj
            calculate = calc

            Feedback

            # re: 編碼規范  回復  更多評論   

            2010-09-10 00:14 by nnnn
            6. API函數前面的 :: ?
            1. 用于區分系統API函數與本地函數

            自己的函數就不該取名于api一樣阿,就無須::
            亚洲国产一成久久精品国产成人综合| 午夜精品久久久久久久无码| 久久午夜无码鲁丝片秋霞| yy6080久久| 久久国产成人精品麻豆| 国内精品久久久久久久久| 欧美与黑人午夜性猛交久久久 | 亚洲va久久久噜噜噜久久男同 | 伊人 久久 精品| 久久精品毛片免费观看| 久久99精品久久久久久不卡| 久久久国产99久久国产一| 青青热久久综合网伊人| 模特私拍国产精品久久| 久久国产视屏| 久久国产免费观看精品| 狠狠色丁香久久婷婷综合| 久久WWW免费人成—看片| 久久99国产综合精品免费| 久久久久亚洲AV成人网人人网站| 亚洲国产成人久久综合一| 亚洲va中文字幕无码久久| 久久久国产亚洲精品| 国产精品久久久久久久午夜片| 久久精品欧美日韩精品| 久久婷婷五月综合成人D啪| 久久影视国产亚洲| 狠狠色综合网站久久久久久久| 精品国产一区二区三区久久久狼| 中文字幕无码久久精品青草 | 中文精品久久久久国产网址| 久久久精品人妻一区二区三区蜜桃 | 美女久久久久久| 久久av免费天堂小草播放| 狠狠狠色丁香婷婷综合久久俺| 色婷婷综合久久久中文字幕| 久久婷婷五月综合成人D啪 | 亚洲午夜精品久久久久久浪潮| 久久精品亚洲欧美日韩久久| 久久久WWW成人| 亚洲伊人久久成综合人影院|