02c c語言編碼規(guī)范_第1頁
02c c語言編碼規(guī)范_第2頁
02c c語言編碼規(guī)范_第3頁
02c c語言編碼規(guī)范_第4頁
02c c語言編碼規(guī)范_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 cmmicmmi ml-3ml-3 v1.2v1.2 c/c+c/c+語言編碼規(guī)范語言編碼規(guī)范(ts)(ts) 文件編號(hào): ts-g-05 編制日期 審核日期 批準(zhǔn)日期 變更記錄變更記錄 版本號(hào)變更日期變更類型變更人變更摘要備注 目目 錄錄 變更記錄變更記錄.2 1.排版規(guī)范排版規(guī)范.4 1.1.縮進(jìn) .4 1.2.空行 .4 1.3.分行 .4 1.4.分界符 .5 1.5.空格 .6 1.6.宏定義 .6 1.7.類定義 .6 1.8.其他 .7 2.命名規(guī)范命名規(guī)范.8 2.1.原則 .8 2.2.命名注釋 .8 2.3.命名風(fēng)格統(tǒng)一 .8 2.4.變量命名 .9 3.變量結(jié)構(gòu)變量結(jié)構(gòu)

2、.10 3.1.賦值檢查 .10 3.2.變量初始化 .10 3.3.單一功能結(jié)構(gòu)體 .10 3.4.結(jié)構(gòu)中的元素個(gè)數(shù) .11 4.函數(shù)過程函數(shù)過程.13 4.1.避免直接使用函數(shù)參數(shù) .13 4.2.簡單功能函數(shù) .14 4.3.避免多參數(shù)函數(shù) .14 4.4.參數(shù)檢查 .15 4.5.重復(fù)代碼 .16 5.注釋規(guī)范注釋規(guī)范.17 5.1.文件注釋 .17 5.2.函數(shù)注釋 .18 5.3.代碼注釋 .18 5.4.注釋位置 .19 1. 排版規(guī)范排版規(guī)范 1.1. 縮進(jìn)縮進(jìn) 程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的長度為 4 個(gè)空格,方式為 ide 自動(dòng)縮 進(jìn)或 tab 縮進(jìn)。一行程序以小于 65

3、 字符為宜,不要寫得過長。對(duì)于由開發(fā)工具 自動(dòng)生成的代碼可以有不一致。函數(shù)或過程的開始、結(jié)構(gòu)的定義及循環(huán)、判斷 等語句中的代碼都要采用縮進(jìn)風(fēng)格,case 語句下的情況處理語句也要遵從語句 縮進(jìn)風(fēng)格 。 1.2. 空行空行 相對(duì)獨(dú)立的程序塊之間、變量說明之后必須加空行。 示例: if (!valid_ni(ni) . / program code /空行 repssn_ind = ssn_dataindex.repssn_index; repssn_ni = ssn_dataindex.ni; 1.3. 分行分行 當(dāng)語句超出或即將超出規(guī)定的列寬,遵循以下規(guī)則進(jìn)行換行: 1) 在逗號(hào)后換行。 2)

4、 在運(yùn)算符,關(guān)鍵字前換行。 3) 選擇在較高級(jí)別(higher-level)的運(yùn)算符處斷開。 4) 新的一行應(yīng)該與上一行同一級(jí)別表達(dá)式的開頭處對(duì)齊。 5) 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代 之以縮進(jìn) 8 個(gè)空格。 6) 規(guī)則 1 優(yōu)先于規(guī)則 2。 當(dāng)以上規(guī)則會(huì)導(dǎo)致代碼混亂的時(shí)候自己采取更靈活的換行規(guī)則。 示例: perm_count_msg.head.len = no7_to_stat_perm_count_len + stat_size_per_fram * sizeof( _ul ); act_task_tableframe_id * stat_task_ch

5、eck_number + index.occupied = stat_poiindex.occupied; act_task_tabletaskno.duration_true_or_false = sys_get_sccp_statistic_state( stat_item ); 1.4. 分界符分界符 程序塊的分界符(如 c/c+語言的大括號(hào)和 )應(yīng)各獨(dú)占一行 并且位于同一列,同時(shí)與引用它們的語句左對(duì)齊。 在函數(shù)體的開始、類的定義、結(jié)構(gòu)的定義、枚舉的定義以及 if、for、do、while、switch、case 語句中的程序都要采用如上的縮進(jìn)方 式。 示例: for (.) . / p

6、rogram code if (.) . / program code else . / program code void example_fun( void ) . / program code 1.5. 空格空格 1. 關(guān)鍵字后需要有空格 2. 運(yùn)算符前后要有空格 3. 功能段之間可以適當(dāng)使用空格 4. 要遵循手寫英語中標(biāo)點(diǎn)符號(hào)的規(guī)范, , 和 ; 后要加空格, ( 除外, 例如: background = new color(red, green, blue); 在操作符前后可以使用空格使代碼增強(qiáng)代碼可讀性。 對(duì)于與英文意義不同的操作符不遵循上述規(guī)則,例如:.和-后不用空格。 1.6.

7、 宏定義宏定義 在宏定義中,盡量使用下面結(jié)構(gòu) #ifndef #define #endif 1.7. 類定義類定義 每個(gè)類定義中都要依次包含 public, protected , private 部分。每個(gè)部分 中要最先給出構(gòu)造函數(shù)和析構(gòu)函數(shù),成員函數(shù)按照函數(shù)名字母排序。 1成員變量用 m_ 做前綴; 2類名已大寫 c 開頭,后面用 pascal 命名規(guī)則; 3成員函數(shù)命名也按 pascal 命名規(guī)則 如: class cmyclass public: void display(); private: int m_icount; ; 1.8. 其他其他 1每行只能寫一條代碼,且廠度不超過 8

8、0 個(gè)字符; 2常量應(yīng)定義為宏,枚舉; 3左 后不可以出現(xiàn)代碼,右 前不可出現(xiàn)代碼; 4. 設(shè)計(jì)常量判斷語句要把常量放左邊,這樣可以防止把 = = 寫成 = ; 5所有新變量在第一次使用都要進(jìn)行初始化; 6對(duì)有返回值的函數(shù)要對(duì)返回值進(jìn)行判斷; 7設(shè)計(jì)到鎖問題都需要成對(duì)的出現(xiàn); 2. 命名規(guī)范命名規(guī)范 2.1. 原則原則 能清楚表達(dá)對(duì)象的含義,盡可能避免二義性。 2.2. 命名注釋命名注釋 命名中若使用特殊約定或縮寫,則要有注釋說明。應(yīng)該在源文件的開始 之處,對(duì)文件中所使用的縮寫或約定,特別是特殊的縮寫,進(jìn)行必要的注 釋說明。 2.3. 命名風(fēng)格統(tǒng)一命名風(fēng)格統(tǒng)一 己特有的命名風(fēng)格,要自始至終保持

9、一致,不可來回變化。個(gè)人的命名 風(fēng)格,在符合所在項(xiàng)目組或產(chǎn)品組的命名規(guī)則的前提下,才可使用。 (即命 名規(guī)則中沒有規(guī)定到的地方才可有個(gè)人命名風(fēng)格) 。用正確的反義詞組命名 具有互斥意義的變量或相反動(dòng)作的函數(shù)等。 示例面是一些在軟件中常用的反義詞組: add / remove begin / end create / destroy insert / delete first / last get / release increment / decrement put / get add / delete lock / unlock open / close min / max old / ne

10、w start / stop next / previous source / target show / hide send / receive source / destination cut / paste up / down get / set 示例: int min_sum; int max_sum; int add_user( byte *user_name ); int delete_user( byte *user_name ); 2.4. 變量命名變量命名 命名通常使用一個(gè)或多個(gè)單詞,不用詞組,使用簡單結(jié)構(gòu)表示。例如:用 parameter_count替代number_of_

11、parameters 。命名可以用數(shù)字、動(dòng)詞、形 容詞、副詞,不要用前置詞、代詞等易混淆概念的詞。 禁止取單個(gè)字符(如 i、j、k.) ,建議除了要有具體含義外,還能表明其變 量類型、數(shù)據(jù)類型等,但 i、j、k 作局部循環(huán)變量是允許的。變量,尤其是局部 變量,如果用單個(gè)字符表示,很容易敲錯(cuò)(如 i 寫成 j) ,而編譯時(shí)又檢查不出 來,有可能為了這個(gè)小小的錯(cuò)誤而花費(fèi)大量的查錯(cuò)時(shí)間。 除了編譯開關(guān)/頭文件等特殊應(yīng)用,應(yīng)避免使用_example_test_之類以 下劃線開始和結(jié)尾的定義。 3. 變量結(jié)構(gòu)變量結(jié)構(gòu) 3.1. 賦值檢查賦值檢查 當(dāng)向公共變量傳遞數(shù)據(jù)時(shí),要十分小心,防止賦與不合理的值或越

12、界 等現(xiàn)象發(fā)生。若有必要應(yīng)進(jìn)行合法性檢查,以提高代碼的可靠性、穩(wěn)定性。 3.2. 變量初始化變量初始化 變量使用前需要初始化,在 c/c+中引用未經(jīng)賦值的指針,經(jīng)常會(huì)引 起系統(tǒng)崩潰。 3.3. 單一功能結(jié)構(gòu)體單一功能結(jié)構(gòu)體 設(shè)計(jì)結(jié)構(gòu)時(shí)應(yīng)力爭使結(jié)構(gòu)代表一種現(xiàn)實(shí)事務(wù)的抽象,而不是同時(shí)代表多 種。結(jié)構(gòu)中的各元素應(yīng)代表同一事務(wù)的不同側(cè)面,而不應(yīng)把描述沒有關(guān)系 或關(guān)系很弱的不同事務(wù)的元素放到同一結(jié)構(gòu)中。 示例:如下結(jié)構(gòu)不太清晰、合理。 typedef struct student_stru unsigned char name8; /* students name */ unsigned char ag

13、e; /* students age */ unsigned char sex; /* students sex, as follows */ /* 0 - female; 1 - male */ unsigned char teacher_name8; /* the student teachers name */ unisgned char teacher_sex; /* his teacher sex */ student; 若改為如下,可能更合理些。 typedef struct teacher_stru unsigned char name8; /* teacher name */

14、unisgned char sex; /* teacher sex, as follows */ /* 0 - female; 1 - male */ teacher; typedef struct student_stru unsigned char name8; /* students name */ unsigned char age; /* students age */ unsigned char sex; /* students sex, as follows */ /* 0 - female; 1 - male */ unsigned int teacher_ind; /* hi

15、s teacher index */ student; 3.4. 結(jié)構(gòu)中的元素個(gè)數(shù)結(jié)構(gòu)中的元素個(gè)數(shù) 結(jié)構(gòu)中元素的個(gè)數(shù)應(yīng)適中。若結(jié)構(gòu)中元素個(gè)數(shù)過多可考慮依據(jù)某種原則 把元素組成不同的子結(jié)構(gòu),以減少原結(jié)構(gòu)中元素的個(gè)數(shù)。增加結(jié)構(gòu)的可理 解性、可操作性和可維護(hù)性。 示例: typedef struct person_base_info_stru unsigned char name8; unsigned char age; unsigned char sex; person_base_info; typedef struct person_address_stru unsigned char addr

16、40; unsigned char city15; unsigned char tel; person_address; typedef struct person_stru person_base_info person_base; person_address person_addr; person; 4. 函數(shù)過程函數(shù)過程 4.1. 避免直接使用函數(shù)參數(shù)避免直接使用函數(shù)參數(shù) 將函數(shù)的參數(shù)作為工作變量,有可能錯(cuò)誤地改變參數(shù)內(nèi)容,所以很危險(xiǎn)。 對(duì)必須改變的參數(shù),最好先用局部變量代之,最后再將該局部變量的內(nèi)容 賦給該參數(shù)。 下函數(shù)的實(shí)現(xiàn)不太好: void sum_data( unsigned

17、int num, int *data, int *sum ) unsigned int count; *sum = 0; for (count = 0; count num; count+) *sum += datacount; / sum 成了工作變量,不太好。 若改為如下,則更好些: void sum_data( unsigned int num, int *data, int *sum ) unsigned int count ; int sum_temp; sum_temp = 0; for (count = 0; count b ) ? a : b ; 改為如下就很清晰了: int

18、max (int a, int b) return (a b) ? a : b); value = max (a, b); 或改為如下。 #define max (a, b) (a) (b) ? (a) : (b) value = max (a, b); 4.3. 避免多參數(shù)函數(shù)避免多參數(shù)函數(shù) 本建議目的是防止函數(shù)間的控制耦合。調(diào)度函數(shù)是指根據(jù)輸入的消息類型 或控制命令,來啟動(dòng)相應(yīng)的功能實(shí)體(即函數(shù)或過程) ,而本身并不完成具體 功能。控制參數(shù)是指改變函數(shù)功能行為的參數(shù),即函數(shù)要根據(jù)此參數(shù)來決定具 體怎樣工作。非調(diào)度函數(shù)的控制參數(shù)增加了函數(shù)間的控制耦合,很可能使函數(shù) 間的耦合度增大,并使函數(shù)的

19、功能不唯一。非調(diào)度函數(shù)應(yīng)減少或防止控制參數(shù), 盡量只使用數(shù)據(jù)參數(shù)。 如下函數(shù)構(gòu)造不太合理: int add_sub( int a, int b, unsigned char add_sub_flg ) if (add_sub_flg = integer_add) return (a + b); else return (a - b); 不如分為如下兩個(gè)函數(shù)清晰: int add( int a, int b ) return (a + b); int sub( int a, int b ) return (a - b); 4.4. 參數(shù)檢查參數(shù)檢查 檢查函數(shù)所有非參數(shù)輸入的有效性,如數(shù)據(jù)文件、公

20、共變量等。函數(shù)的輸 入主要有兩種:一種是參數(shù)輸入;另一種是全局變量、數(shù)據(jù)文件的輸入,即非 參數(shù)輸入。函數(shù)在使用輸入之前,應(yīng)進(jìn)行必要的檢查。 在同一項(xiàng)目組應(yīng)明確規(guī)定對(duì)接口函數(shù)參數(shù)的合法性檢查應(yīng)由函數(shù)的調(diào)用者 負(fù)責(zé)還是由接口函數(shù)本身負(fù)責(zé),缺省是由函數(shù)調(diào)用者負(fù)責(zé)。但函數(shù)的提供者也 要對(duì)輸出做基本的合法性檢查。 4.5. 重復(fù)代碼重復(fù)代碼 如果多段代碼重復(fù)做同一件事情,那么在函數(shù)的劃分上可能存在問題。若 此段代碼各語句之間有實(shí)質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,那么可考慮把此 段代碼構(gòu)造成一個(gè)新的函數(shù)。 5. 注釋規(guī)范注釋規(guī)范 5.1. 文件注釋文件注釋 文件頭部應(yīng)進(jìn)行注釋,注釋必須列出:版權(quán)說明、版本號(hào)

21、、生成日期、 作者、內(nèi)容、功能、與其它文件的關(guān)系、修改日志等,頭文件的注釋中還 應(yīng)有函數(shù)功能簡要說明。 示例:下面這段文件注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述 信息建議要包含在內(nèi)。 /* copyright (c), 19xx-20 xx infocore. co. ltd. file name: / 文件名 author: version: date: / 作者、版本及完成日期 description: / 用于詳細(xì)說明此程序文件完成的主要功能,與其 他模塊 / 或函數(shù)的接口,輸出值、取值范圍、含義及 參數(shù)間的控 / 制、順序、獨(dú)立或依賴等關(guān)系 function list: / 主要

22、函數(shù)列表,每條記錄應(yīng)包括函數(shù)名及功能簡 要說明 1. . history: / 修改歷史記錄列表,每條修改記錄應(yīng)包括修改日 期、修改 / 者及修改內(nèi)容簡述 1. date: author: modification: 2. . */ 5.2. 函數(shù)注釋函數(shù)注釋 函數(shù)頭部應(yīng)進(jìn)行注釋,列出:函數(shù)的目的/功能、輸入?yún)?shù)、輸出參數(shù)、 返回值、調(diào)用關(guān)系(函數(shù)、表)等。 下面這段函數(shù)的注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述信息 建議要包含在內(nèi)。 /* function: / 函數(shù)名稱 description: / 函數(shù)功能、性能等的描述 calls: / 被本函數(shù)調(diào)用的函數(shù)清單 called by: / 調(diào)用本函數(shù)的函數(shù)清單 table accessed: / 被訪問的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫操作的程序) table updated: / 被修改的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫操作的程序) parameter: / 輸入輸出參數(shù)說明,包括每個(gè)參數(shù)的作 / 用、取值說明及參數(shù)間關(guān)系。 return: / 函數(shù)返回值的說明 others: / 其它說明 */ 5.3. 代碼注釋代碼注釋 邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一 致性。不再有用的注釋要?jiǎng)h除。修改他人的代碼時(shí)應(yīng)該將其本來代碼注釋掉后 重新編寫(并標(biāo)明修改人,修改日期,問題描述) ,而不能簡單的刪

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論