• <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>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            C/C++源代碼書寫規(guī)范

            1. 在.h/.cpp的開頭應(yīng)有一段格式統(tǒng)一的說明,內(nèi)容包括:
            a. 文件名 (FileName);
            b. 創(chuàng)建人 (Creator);
            c. 文件創(chuàng)建時(shí)間 (Date);
            d. 簡短說明文件功能、用途 (Comment)。
            例:
            //////////////////////////////////////////?
            //?
            //?FileName:?GetVersion.h?
            //?Creator:?Liu?Haifeng?
            //?Date:?2002-10-28?
            //?Comment:?Get?file?version?information?
            //?
            //////////////////////////////////////////?

            2.對(duì)于主要功能函數(shù)應(yīng)有注釋說明。內(nèi)容包括:功能、入口/出口參數(shù),必要時(shí)還可有備注或補(bǔ)充說明,對(duì)于函數(shù)中的主要功能代碼,也應(yīng)有注釋說明。注釋以英文為主。
            例:
            //////////////////////////////////////////?
            //?
            //Remarks:?
            //?Check?file?whether?exist?
            //?
            //Parameters:?
            //?LPCTSTR?lpszPathName?:?Input?full?path?name?
            //?
            //Return?values:?
            //?int?:?Non-zero?means?success?
            //?Zero?means?failure?
            //?
            //////////////////////////////////////////?

            3. 每列代碼的長度推薦為80列,最長不得超過120列;折行以對(duì)齊為準(zhǔn)。
            例:HANDLE KSOpenFile(const char cszFileName[],
            int nMode);
            或者:
            BOOL?KSReadFile(?
            HANDLE?hFile,?
            void?*pvBuffer,?
            int?nReadSize,?
            int?*pnReadSize?
            );?

            4. 循環(huán)、分支代碼,判斷條件與執(zhí)行代碼不得在同一行上。
            例:正確:
            if (n == -2)
            n = 1;
            else
            n = 2;
            不得寫做:
            if (n == -2) n = 1;
            else n = 2;
            5. 指針的定義,* 號(hào)既可以緊接類型,也可以在變量名之前。
            例:可寫做:int* pnsize;
            也可寫做:int *pnsize;
            但不得寫做:int * pnsize;
            6. 在類的成員函數(shù)內(nèi)調(diào)用非成員函數(shù)時(shí),在非成員函數(shù)名前必須加上"::"。
            例:::Sleep(2000);
            7. 函數(shù)入口參數(shù)有缺省值時(shí),應(yīng)注釋說明。
            例:
            BOOL KSSaveToFile(
            const char cszFileName[],
            BOOL bCanReplace /* = TRUE */
            );
            或者:
            BOOL KSSaveToFile(
            const char cszFileName[],
            BOOL bCanReplace // = TRUE
            );
            8. else if 必須寫在一行。
            9. 與‘{’、‘}’有關(guān)的各項(xiàng)規(guī)定:
            9.1‘{’、‘}’應(yīng)獨(dú)占一行。在該行內(nèi)可有注釋。
            例:正確:
            for (i = 0; i < cbLine; i++)
            { // .....
            printf("Line %d:", i);
            printf("%s\n", pFileLines);
            }
            不得寫做:
            for?(i?=?0;?i?<?cb;?i++)?
            {?printf("Line?%d:",?i);?
            printf(
            "%s\n",?pFileLines);?
            }
            ?

            9.2‘{’必須另起一行,‘{’之后的代碼必須縮進(jìn)一個(gè)Tab。‘{’與‘}’必須在同一列上。
            例:正確:
            if (i > 0)
            {
            m = 1;
            n++;
            }
            不得寫做:
            if?(i?>?0)?{?
            m?
            =?1;?
            n
            ++;?
            }
            ?

            例外:
            if?(i?==?0)?
            {?ASSERT(FALSE);?return;?}?

            9.3 在循環(huán)、分支之后若只有一行代碼,雖然可省略‘{’、‘}’,但不推薦這么做。若省略后可能引起歧義,則必須加上‘{’、‘}’。
            例:正確:
            if?(n?==?-2)?
            n?
            =?1;?
            else?
            n?
            =?2;?

            或者:
            if?(n?==?-2)?
            {?n?=?1;?}?
            else?if?(n?!=?nTemp)?
            {?n?=?2;?}?
            else?
            {?n?=?3;?}?

            不得寫做:
            if?(n?==?-2)?
            n?
            =?1;?
            else?if?(n?!=?nTemp)?
            n?
            =?2;?
            else?
            n?
            =?3;?

            不推薦:
            if?(i?<?1)?
            {?n?=?1;?}?
            else?
            {?
            if?(i?==?1)?
            {?n?=?2;?}?
            else?
            {?
            if?(i?>?1)?
            {?n?=?3;?}?
            }
            ?
            }
            ?

            10. 與空格有關(guān)的各項(xiàng)規(guī)定。
            10.1 在所有兩目、三目運(yùn)算符的兩邊都必須有空格。在單目運(yùn)算符兩端不必空格。但在‘->’、‘::’、‘.’、‘[’、‘]’等運(yùn)算符前后,及‘&’(取地址)、‘*’(取值)等運(yùn)算符之后不得有空格。
            例:正確:
            int n = 0, nTemp;
            for (int i = nMinLine; i <= nMaxLine; i++)
            不得寫做:
            int n=0, nTemp;
            for ( int i=nMinLine; i<=nMaxLine; i++ )
            10.2 for、while、if 等關(guān)鍵詞之后應(yīng)有1個(gè)空格,再接‘(’,之后無空格;在結(jié)尾的‘)’前不得有空格。
            例:正確:
            if (-2 == n)
            不得寫做:
            if(-2 == n)

            if ( -2 == n )
            等等。
            10.3 調(diào)用函數(shù)、宏時(shí),‘(’、‘)’前后不得有空格。
            例:正確:
            printf("%d\n", nIndex);
            不得寫做:
            printf ("%d\n", nIndex);
            printf( "%d\n", nIndex );
            等等。
            10.4 類型強(qiáng)制轉(zhuǎn)換時(shí),‘(’‘)’前后不得有空格
            例:可寫做:
            (KSFile*)pFile;
            也可寫做:
            (KSFile *)pFile
            不得寫做:
            ( KSFile* )pFile
            ( KSFile * ) pFile
            11. 與縮進(jìn)有關(guān)的各項(xiàng)規(guī)定
            11.1 縮進(jìn)以 Tab 為單位。1 個(gè) Tab 為 4 個(gè)空格
            11.2 下列情況,代碼縮進(jìn)一個(gè) Tab:
            1. 函數(shù)體相對(duì)函數(shù)名及'{'、'}'。
            例:
            int?Power(int?x)?
            {?
            return?(x?*?x);?
            }
            ?

            2. if、else、for、while、do 等之后的代碼。
            3. 一行之內(nèi)寫不下,折行之后的代碼,應(yīng)在合理的位置進(jìn)行折行。若有 + - * / 等運(yùn)算符,則運(yùn)算符應(yīng)在上一行末尾,而不應(yīng)在下一行的行首。
            11.3 下列情況,不必縮進(jìn):switch 之后的 case、default。
            例:
            switch?(nID)?
            {?
            case?ID_PLAY:?
            ?
            break;?
            case?ID_STOP:?
            ?
            break;?
            default:?
            ?
            break;?

            12.對(duì)于涉及到系統(tǒng)的功能調(diào)用,要求使用系統(tǒng)提供的宏,不得直接使用具體的數(shù)值。
            例: char szSystemPath[MAX_PATH] = {0}; 正確
            char szSystemPath[260] = {0}; 錯(cuò)誤
            13.關(guān)于函數(shù)編寫的規(guī)定
            13.1 除了非常簡單的函數(shù)或者沒有必要,函數(shù)需要有返回值,并且推薦
            返回值的類型為int,成功時(shí)為 true,失敗時(shí)為false。不推薦直接使用1和0來表示。
            13.2 在函數(shù)內(nèi)部變量定義全部放在函數(shù)的開始處,不能在代碼中間出現(xiàn) 變量定義。變量定義需要初始化值,一般是0、false、NULL等。
            13.3 程序員自行編寫的函數(shù)不推薦使用DWORD等指明字節(jié)長度的變量 類型,推薦使用unsigned long等變量類型。對(duì)于ULONG等vc系統(tǒng)定義的變量類型,推薦使用unsigned long 來代替。如果調(diào)用系統(tǒng)API,在MSDN中已經(jīng)指明了是DWORD等類型,則可以使用。
            13.4 推薦使用int nResult作為函數(shù)自身的返回值變量,int nRetCode、BOOL bRetCode作為調(diào)用其他函數(shù)的返回值變量。
            13.5 推薦使用goto語句來統(tǒng)一函數(shù)出口,goto語句一般只能跳轉(zhuǎn)到一個(gè)函數(shù)出口,最多只能有兩個(gè),出口標(biāo)識(shí)必須命名為Exit0和Exit1。在出口處必須顯式檢查曾經(jīng)申請(qǐng)過的系統(tǒng)資源(如內(nèi)存),并且進(jìn)行釋放。
            13.6 如果編寫DLL,除非特殊情況,導(dǎo)出函數(shù)的調(diào)用類型必須是__stdcall,便于多模塊協(xié)同工作。

            附錄:
            1.函數(shù)編寫示范
            /////////////////////////////////////////////////////////////////////?
            //?
            //?Remarks:?
            //?Get?file?version?information?
            //?
            //?Parameters:?
            //?[in]?const?char?cszPathName?:?Input?file?path?name?
            //?[out]?PVERSION_INFO?*pVersionInfo?:?File?version?information?
            //?
            //?Return?values:?
            //?int?:?Non-zero?means?success,?zero?means?failure?
            //?
            /////////////////////////////////////////////////////////////////////?
            int?GetFileVersion(const?char?cszPathName,?PVERSION_INFO?*pVersionInfo)?
            {?
            int?nResult?=?false;?
            int?nRetCode?=?false;?
            char?szSystemPath[MAX_PATH]?=?{0};?
            nRetCode?
            =?IsFileExist(cszPathname);?
            if?(!nRetCode)?
            goto?Exit0;?
            //Others?code?here?
            nResult?=?true;?
            Exit0:?
            return?nResult;?
            }

            posted on 2006-04-21 18:01 楊粼波 閱讀(618) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 文章收藏

            欧美日韩中文字幕久久伊人| 久久久艹| 国产精品无码久久综合网| 精品国产热久久久福利| 久久久久久久综合狠狠综合| 2021少妇久久久久久久久久| 精品无码人妻久久久久久| 中文字幕日本人妻久久久免费 | 人妻无码αv中文字幕久久| 久久电影网2021| 亚洲AV无码久久精品色欲| 国内精品久久久久久久久电影网| 久久精品国产亚洲AV久| 国产一区二区精品久久凹凸| 韩国免费A级毛片久久| 亚洲精品99久久久久中文字幕| 久久国产乱子伦精品免费强| 天天爽天天狠久久久综合麻豆| 99久久精品无码一区二区毛片| 久久亚洲AV成人无码国产| 中文字幕精品久久| 欧美大战日韩91综合一区婷婷久久青草| 亚洲精品乱码久久久久久| 香蕉99久久国产综合精品宅男自| 大美女久久久久久j久久| 亚洲精品高清久久| 久久综合狠狠色综合伊人| 国产成人精品久久二区二区| 久久久久成人精品无码中文字幕| 蜜臀久久99精品久久久久久小说 | 色综合久久久久久久久五月| 精品国产乱码久久久久软件| 亚洲人成无码久久电影网站| 婷婷久久综合九色综合九七| 欧美久久亚洲精品| 一本色道久久88综合日韩精品| 青青热久久国产久精品 | 色婷婷噜噜久久国产精品12p | 久久精品国产第一区二区| 久久久久久极精品久久久| 亚洲午夜久久久精品影院|