• <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.¢%

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

            編碼規(guī)范

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


            原則:
            (1) 團(tuán)隊(duì)風(fēng)格統(tǒng)一,明確規(guī)則,提高可讀性

            1. 字符串類問(wèn)題

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

            TCHAR
            char*
            wchar*

            char[]
            wchar[]

            LPCTSTR
            LPTSTR

            xxstring(自己封裝的string類)

            其它庫(kù)的 string

            ""
            L""
            _T("")

            Format() 問(wèn)題

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

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

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

            5. 代碼跨平臺(tái)兼容?

            6. API函數(shù)前面的 :: ?
            1. 用于區(qū)分系統(tǒng)API函數(shù)與本地函數(shù)

            7. 函數(shù)命名?
            1. 采用 "動(dòng)"+"賓"結(jié)構(gòu),
            2. Is + 動(dòng) + 賓 結(jié)構(gòu)
            3. 意思明確,無(wú)歧義

            8. 濫用第三方庫(kù)?

            9. 當(dāng) if 里只有一條語(yǔ)句時(shí)?
            if(xxxxxxx)
            ??? 語(yǔ)句;
            or
            if(xxxxxxx)
            {
            ??? 語(yǔ)句;
            }

            10. 函數(shù)的參數(shù)安全性判斷 與 多重判斷 帶來(lái)的性能負(fù)累?
            A函數(shù)與B函數(shù)有著一樣的參數(shù)
            A函數(shù)調(diào)用B函數(shù)
            結(jié)果 A函數(shù)對(duì)所有參數(shù)進(jìn)行了安全性的判斷
            A函數(shù)調(diào)用B函數(shù)時(shí),又重復(fù)作了安全性的判斷

            11. 注釋規(guī)范?
            1. 文件頭注釋?
            2. 函數(shù)注釋?
            3. 函數(shù)內(nèi)注釋?

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

            13. 每個(gè)函數(shù)都會(huì)有執(zhí)行失敗的時(shí)候(雖然它可能失敗的機(jī)率是萬(wàn)分之一)但也請(qǐng)小心處理它

            14. 關(guān)于其它命名空間里函數(shù)的用法?
            #include <vector>
            using namespace std;

            vector<int> vecTest;

            or

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

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


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

            同個(gè)項(xiàng)目中,類與類之間的依賴是可以理解的,但當(dāng)某天我想用這個(gè)Project中的某個(gè)類時(shí),依賴的文件太多,不容易單獨(dú)抽出來(lái)使用

            16. C++代碼中是否應(yīng)該使用 goto?

            17. 模板中的 typename or class?
            統(tǒng)一采用 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. 設(shè)計(jì)模式的濫用?
            為了防止設(shè)計(jì)模式的濫用,未清楚設(shè)計(jì)模式的意圖前,別用它

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

            25. 關(guān)于注釋,注釋形式不限,但
            ?? (1)每個(gè)函數(shù)至少要有簡(jiǎn)要的注釋;
            ?? (2)每個(gè)參數(shù)都要說(shuō)明其用途


            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) ?
            --- 使用后者,因?yàn)楹笳邥?huì)進(jìn)行類型判斷,如果不一致會(huì)拋出異常
            vc6.0要支持向下轉(zhuǎn)型要加入GR開關(guān),而這在vc6.0z中是默認(rèn)關(guān)閉的

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

            31. 語(yǔ)句太長(zhǎng)?
            寫法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. 當(dāng) if 語(yǔ)句的只有一條語(yǔ)句時(shí),哪種寫法更好?
            (1)? if(xxxx)
            ????? {
            ???????????? xxxxx;
            ????? }
            (2) if(xxxx)
            ??????????? xxxxxx;


            -----------------------------------------------------------------------------
            1. 概覽
            1.1. 原則和主旨
            高質(zhì)量代碼有如下特質(zhì):
            (1) 可讀性,簡(jiǎn)單明確, 注釋清楚,突出重點(diǎn), 示例代碼
            (2) 一致性, 代碼風(fēng)格統(tǒng)一
            (3) 正確性, 經(jīng)過(guò)單元測(cè)試,pc-lint檢測(cè), 符合文檔描術(shù)要求
            (4) 安全性


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

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

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

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

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

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

            Feedback

            # re: 編碼規(guī)范  回復(fù)  更多評(píng)論   

            2010-09-10 00:14 by nnnn
            6. API函數(shù)前面的 :: ?
            1. 用于區(qū)分系統(tǒng)API函數(shù)與本地函數(shù)

            自己的函數(shù)就不該取名于api一樣阿,就無(wú)須::
            久久久精品人妻一区二区三区蜜桃| 国产成人久久久精品二区三区| 99久久精品国产一区二区蜜芽 | 久久久www免费人成精品| 精品国产婷婷久久久| 国产精品美女久久久久AV福利| 亚洲国产精品久久久久久| 97久久超碰国产精品旧版| 色综合久久久久无码专区| 久久精品中文字幕一区| 伊人久久综合无码成人网 | 国产精品VIDEOSSEX久久发布 | 久久精品久久久久观看99水蜜桃| 香蕉久久夜色精品国产2020| 久久久www免费人成精品| 久久只有这里有精品4| 久久久久国产精品人妻| 人妻精品久久久久中文字幕69| 久久夜色精品国产噜噜麻豆| 久久国产乱子伦免费精品| 国产精品福利一区二区久久| 国产巨作麻豆欧美亚洲综合久久| 久久伊人亚洲AV无码网站| 亚洲午夜久久久久久久久电影网 | 区久久AAA片69亚洲| 久久久精品人妻一区二区三区蜜桃 | 精品多毛少妇人妻AV免费久久 | 国产欧美一区二区久久| 国产69精品久久久久99| 久久精品中文字幕大胸| 久久九九精品99国产精品| 久久国产乱子伦精品免费强| 色欲综合久久躁天天躁| 麻豆一区二区99久久久久| 国产精品欧美久久久久天天影视| 久久婷婷色综合一区二区| 国产AⅤ精品一区二区三区久久| 亚洲va中文字幕无码久久不卡| 99国内精品久久久久久久| 无码人妻精品一区二区三区久久久| 狠狠久久综合伊人不卡|