久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置: > 華清遠見教育科技集團 > 嵌入式學習 > 講師博文 > C編碼規范
C編碼規范
時間(jian):2016-12-14作(zuo)者:華清遠見

為什么需要編碼規范?

見過 很(hen)多C語言的(de)初學者(zhe)(zhe)寫的(de)代碼(ma),他們并不懂什(shen)么是好(hao)的(de)編碼(ma) 風(feng)格(ge)(ge),寫出來的(de)代碼(ma)風(feng)格(ge)(ge)各異(yi)。有(you)的(de)風(feng)格(ge)(ge)極易導致錯誤,有(you)的(de)風(feng)格(ge)(ge)讓(rang)人難以理解,有(you)的(de)風(feng)格(ge)(ge)讓(rang)人眼花繚(liao)亂(luan),有(you)的(de)風(feng)格(ge)(ge)甚至連(lian)作者(zhe)(zhe)自己都不知道寫代碼(ma)那會自己到底在想什(shen)么。

良(liang)好的(de)(de)編碼風格(ge)(ge),并不是(shi)官僚制(zhi)度下產(chan)生的(de)(de)浪費大(da)家時(shi)間(jian)的(de)(de)制(zhi)度。統(tong)一(yi)的(de)(de)編碼風格(ge)(ge),可(ke)以讓(rang)別人很容易理(li)解代碼意圖(tu),進而快速使用(yong)和二次開發,大(da)大(da)節約開發時(shi)間(jian)。并且極大(da)的(de)(de)簡(jian)化了代碼維護,減少了維護成本。

良好的編碼風格(ge),可(ke)以讓程(cheng)序員避免一些(xie)細節上(shang)的缺失。雖然這些(xie)東(dong)西可(ke)能(neng)很(hen)細微(wei),但若你(ni)不注意這些(xie)細節,那(nei)可(ke)能(neng)會給整(zheng)個軟件的質量帶來(lai)極大的影響,所謂“千里之(zhi)堤毀(hui)于蟻穴”。

很(hen)多大公(gong)司,例(li)如google,華為(wei),騰訊(xun)等(deng),都會在新(xin)員工(gong)入職培(pei)訓的(de)(de)(de)階段(duan)培(pei)訓編(bian)(bian)程標準(zhun)。每個員工(gong)都必須遵循公(gong)司內部制定的(de)(de)(de)編(bian)(bian)程標準(zhun)。程序(xu)就像(xiang)一個作(zuo)品,有素質有修養的(de)(de)(de)程序(xu)員的(de)(de)(de)作(zuo)品必然是一圖精(jing)美的(de)(de)(de)圖畫(hua),一首(shou)美妙的(de)(de)(de)歌(ge)曲(qu),一本賞心悅(yue)目的(de)(de)(de)小說。

如何編寫代碼

注釋

注釋是源(yuan)(yuan)碼中非常(chang)重要的(de)部分,通常(chang)源(yuan)(yuan)程序中的(de)注釋量必須在15%~20%以上。注釋的(de)原則是有(you)助(zhu)于程序的(de)閱讀和理解。所(suo)以注釋語言必須準確,易(yi)懂,簡潔。注釋不宜過多,也不宜太少。

文件或者模塊的注釋

對于一個文件或模塊注釋,應該(gai)有文件名稱,生成日期,作者名字,模塊描述,版本編(bian)號,修改記錄等。例如:

/****************************************
        * name: //文件名稱
        * Date: //創建日趨
        * Description: //詳細描述此程序文件 * 主要功能,以及與其他文 * 件的關系
        * Author: //文件作者
        * Version: //文件版本號。
        * Modification: // 描述該文件修改日志
     ;   *****************************************/ 

2.函數的注釋

對于(yu)函數,我們需要標注的內容主要是:函數名(ming)稱,參(can)數說(shuo)明,功能描述,返回(hui)值(zhi)說(shuo)明等(deng)。例如:

/***************************************************
        *Function name: //函數名稱
        * Description: //函數功能描述
        *Inputs: //函數參數描述
        * Outputs: //函數返回值描述
        *Author: //函數作者
        *Other: //函數其他說明
         ***************************************************/

3.其他的注釋

i. 邊寫代碼邊注(zhu)釋,對于(yu)具(ju)有一定含義的變(bian)量、常(chang)量、數據(ju)結(jie)構以及相關算法,若其名稱不能充分(fen)說(shuo)(shuo)明其用途或需要添加額外(wai)的說(shuo)(shuo)明,都必(bi)須進行注(zhu)釋。

ii. 注釋(shi)(shi)一般位于需(xu)要注釋(shi)(shi)的語句相鄰(lin)的上(shang)方(fang)或者右方(fang)。禁止在(zai)代碼(ma)的下方(fang)寫(xie)注釋(shi)(shi)。

iii. 將注(zhu)釋與其上面(mian)的代(dai)碼用空行間隔。

iv. 注釋(shi)的格式盡量一(yi)致(zhi),建議使用(yong)/*..........*/

二、代碼的排版

良(liang)好的(de)(de)排版是優秀代碼風格的(de)(de)關鍵(jian)。以下是代碼排版需要主動的(de)(de)事項。

1.程(cheng)序塊(kuai)要采用縮進(jin)風格(ge)編寫(xie),縮進(jin)的空(kong)格(ge)數(shu)是(shi)4個

2.相對獨立(li)的(de)代碼(ma)塊之間(jian),變量的(de)說明之后(hou),必須加入空行。

例如:

if ( ! is_empty(list)))
        {
                .................// code
        }

        Pop_list(list);

3.較長(chang)的語句(ju)要分成多(duo)行書寫。循環、判(pan)斷等(deng)語句(ju)中若有較長(chang)的表達(da)式或語句(ju),要進行適當的劃分。

4.不允許把多(duo)個短語(yu)(yu)句(ju)寫(xie)在一(yi)行中,一(yi)行只寫(xie)一(yi)條(tiao)語(yu)(yu)句(ju)。

例如:

rect.length = 0;

rect.width = 0;

5.if,for,do,while,case,switch,default等獨(du)占一(yi)行(xing),且其中語(yu)句(ju)部分無論幾行(xing)都需要加{}。

6.注意運算符的優先(xian)級,并用(yong)括號明(ming)確表達(da)式的操(cao)作(zuo)順序,避免使(shi)用(yong)默認優先(xian)級。

三、標識符命名

標識符的命名要清晰,有明(ming)確含(han)義。使(shi)用完整的單詞或大家基本可以理解(jie)的縮寫(xie),避免使(shi)人產生誤(wu)解(jie)。

1.常量命(ming)名使(shi)用(yong)大寫(xie) 例如 :MAX_VALUE

2.變量(liang)(liang)命名(ming)禁止取(qu)單個字符,建議除了要有具體(ti)含義外(wai),還能表(biao)明(ming)存儲類(lei)型(xing)、數(shu)據類(lei)型(xing)等,但是i,j,k作為局部不(bu)循(xun)環變量(liang)(liang)是可以(yi)的(de)。

變量(liang)命(ming)名(ming)可以采用匈牙利(li)命(ming)名(ming)法(fa) ,變量(liang)的第一個字母(mu)小寫(xie),

表示其數據類(lei)型(xing),如 int iIndex; char cIndex;

也可(ke)(ke)以采(cai)用(yong)linux通(tong)用(yong)的命名規范,采(cai)用(yong)‘_’分割短語命名一個變(bian)量,例如(ru)一個變(bian)量保(bao)存圖書數目,可(ke)(ke)以命名為

int number_book;

下(xia)列所示的局部變量(liang)方法(fa)可以(yi)借鑒:

int liv_width;

其解釋如下:

l        局部變量(local)
        i        數據類型(Integer)
        v        變量(Variable)
        width        變(bian)量含義

3.標示符的風格(ge)要自始至終保持一致(zhi),不可來回(hui)變(bian)換。

4.避免不(bu)易理解的數字(zi),要(yao)用有意(yi)義的宏(hong)來代替。例如:

#define MAX 128

四、宏

1.用宏定義表達式的(de)時候(hou),要使用完備(bei)的(de)括號(hao)。例(li)如:

#define MAX(a,b) a > b ? a : b
        應該定義為:#define MAX(a,b) (a) > (b) ? (a) : (b)
        #define RECTANGLE_AREA( a,b) ( a * b )
        應(ying)該定(ding)義為:#define RECTANGLE_AREA(a,b) ((a) * (b))

2.使用宏的時候,不允許參數發生變化。例(li)如:

如下用法會產生錯(cuo)誤:

#define SQUARE(a) ((a) * (a))
        Int a = 5;
        Int b = SQUARE(a++)
        宏擴展之后,或許會讓你意想不到結果是30。
        擴展后的表達式是:((a++) * (a++))
        正確的寫法應該是:
        b = SQUARE(a);
        a++; // a++ 只執行了一次

3.將常量聲明為宏(hong),防止代碼(ma)中的硬編碼(ma)。

比如:int user[100];

誰也不知道100到底表示什么含義,你可以定義一個宏來表示其含義,比如大用戶數量MAX_USER。若程序中突然出現for(i = 0;i < 100;i++)這樣的代碼,你或許根本不知道100表示什么含義。再或者你要改變這個值,100出現幾次就需要修改幾個位置 ,這就是硬編碼帶來的后果。

4.頭文件中的預編譯

當多(duo)個(ge)文件同時包含一個(ge)頭文件的時候(hou),#ifndef是個(ge)很關 鍵的東(dong)西。它能(neng)避免重復包含頭文件所帶來(lai)的命名(ming)沖突。

一般的格式如下:

在/fad/cde.h文件中

#ifndef FAD_CDE_H
        #define FAD_CDE_H
        .....
    ;     #endif

五、函數

1.對于所調用的函數的錯誤(wu)返回碼,要進行仔細,全面的處理。

2.函數的規模(mo)盡量限制在200行以內(nei)。

3.一個函(han)數僅完(wan)成一件事情,多功(gong)能的函(han)數,可能會(hui)使函(han)數的理解(jie)、測試、維護變得(de)困(kun)難。

4.檢查所(suo)有參數輸入的有效性,可以使(shi)用斷言。

六、頭文件和源文件

一般來說,頭文(wen)(wen)件(jian)中是(shi)聲明,源文(wen)(wen)件(jian)中是(shi)定義。源文(wen)(wen)件(jian)要編譯成庫文(wen)(wen)件(jian),若別(bie)人要使用(yong)你的函(han)數,就要引用(yong)你的頭文(wen)(wen)件(jian),所以(yi)頭文(wen)(wen)件(jian)一般是(shi)變量、宏定義、枚舉、結構和函(han)數接口的聲明,源文(wen)(wen)件(jian)則是(shi)實現的細節。

頭文(wen)件和源文(wen)件大的用處(chu)就是聲明和實現(xian)(xian)分開(kai)。直接把函(han)數實現(xian)(xian)寫到頭文(wen)件中是很不好的習(xi)慣(guan)。

發表評論
評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)