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

下載本文檔

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

文檔簡(jiǎn)介

1、.C語言編程規(guī)范說明書編寫人: 編寫日期: 審批人: 審批日期:當(dāng)前版本:文件編號(hào):目錄第一章 引言1第一節(jié) 編寫目的11.1.1 作用11.1.2 預(yù)期讀者1第二節(jié) 編寫背景11.2.1 文件名稱及版本號(hào)11.2.2 任務(wù)提出者11.2.3 任務(wù)承接者及實(shí)施者11.2.4 使用者11.2.5 與其它文件的關(guān)系1第二章 UNIX下C程序編碼規(guī)范2第一節(jié) 程序的構(gòu)成22.1.1 C程序要素22.1.2 C程序構(gòu)成舉例2第二節(jié) 源文件的命名規(guī)則及構(gòu)成32.2.1 文件擴(kuò)展名32.2.2 文件頭的注釋42.2.3 源文件的構(gòu)成42.2.4 文件分類存放:4第三節(jié) 函數(shù)命名規(guī)則及構(gòu)成42.3.1 函數(shù)

2、命名:42.3.2 函數(shù)頭的注釋42.3.3 函數(shù)體的書寫格式52.3.4 函數(shù)返回6第四節(jié) 語句的書寫格式62.4.1 SWITCH語句的書寫格式62.4.2 IF語句的書寫格式62.4.3 WHILE語句的書寫格式62.4.4 DO語句的書寫格式72.4.5 FOR語句的書寫格式72.4.6 函數(shù)的書寫格式7第五節(jié) 常量變量及庫表結(jié)構(gòu)命名72.5.1 常量命名72.5.2 變量命名7第六節(jié) 程序的變更格式82.6.1 程序的更改82.6.2 程序版本的修改9第七節(jié) 其他格式92.7.1 條件編譯語句的使用92.7.2 有關(guān)內(nèi)嵌SQL語句的規(guī)范9第八節(jié) 函數(shù)例程10第九節(jié) Makefile文

3、件例程11*; 易聯(lián)通(PowerLink3.0)編程規(guī)范說明書 V1.0 聯(lián)想(北京)有限公司第一章 引言第一節(jié) 編寫目的1.1.1 作用為使項(xiàng)目在軟件開發(fā)過程中源代碼的編寫和管理規(guī)范化,使源代碼可讀性好、兼容性好,易維護(hù)等,特制定如下規(guī)范,并要求全體開發(fā)人員遵循。編程規(guī)范書是根據(jù)多個(gè)項(xiàng)目開發(fā)經(jīng)驗(yàn)及部門其他項(xiàng)目編程規(guī)范書的基礎(chǔ)上。它是編程階段程序編寫的指導(dǎo)性文件。1.1.2 預(yù)期讀者本文檔的閱讀對(duì)象是本項(xiàng)目軟件開發(fā)人員、軟件測(cè)試人員、軟件維護(hù)人員,也供其他項(xiàng)目編程參考。第二節(jié) 編寫背景1.2.1 文件名稱及版本號(hào)1.2.2 任務(wù)提出者綜合前置平臺(tái)總體設(shè)計(jì)組1.2.3 任務(wù)承接者及實(shí)施者王華,

4、徐戟1.2.4 使用者預(yù)期讀者,也供有關(guān)領(lǐng)導(dǎo)審閱1.2.5 與其它文件的關(guān)系作為總體設(shè)計(jì)中代碼設(shè)計(jì)的附錄文件第二章 UNIX下C程序編碼規(guī)范本章定義UNIX下C語言編碼的規(guī)范,鑒于UNIX是一組相似的操作系統(tǒng)的集合,本節(jié)內(nèi)容適用于X86上SCO UNIX、RS6000 AIX、Linux等操作系統(tǒng)下的C和ESQL/C編程。第一節(jié) 程序的構(gòu)成2.1.1 C程序要素C語言程序是由各種說明和定義組成。具體地說,C程序的要素包括包含文件說明#include <.> #include “”常數(shù)定義#define .宏定義#define .類型說明typedef .外部變量說明extern.全

5、局變量定義外部函數(shù)引用說明內(nèi)部函數(shù)引用說明函數(shù)描述2.1.2 C程序構(gòu)成舉例下面舉例說明各種成分的結(jié)構(gòu)和形式。/* *包含文件說明*/#include <stdio.h>/* *常數(shù)定義*/* Error Code 定義 */#define ERR_FILEIO(-1)/* file I/O error*/#define ERR_SYS(-2)/* system service error */#define ERR_MALLOC(-3)/* memory allocation error*/#define ERR_PARAMETER(-4)/* parameter error*/

6、* Status Code 定義 */#define STS_IDLE1/* idle*/#define STS_READY2/* ready*/#define STS_RUN3/* running*/#define STS_STOP4/* stop*/* *宏定義*/#define ADD(x,y) (x)+(y)/* *類型定義*/typedef integer long;struct abcint iA;/*.*/int iB;/*.*/int iC;/*.*/;/* *外部變量說明*/extern integer g_Xyz;/*.*/extern short g_Abc;/*.*/*

7、 *全局變量定義*/intg_CommandData;/*. */* *函數(shù)引用說明*/extern int WIN_GetLine();extern int SomeFunc();int MyFunc1();int MyFunc2();/* *函數(shù)描述*/int MyFunc(int argc,char * argv)第二節(jié) 源文件的命名規(guī)則及構(gòu)成2.2.1 文件擴(kuò)展名*.h用于記載說明、定義的源文件*.c用于記載C程序描述的源文件*.ec用于記載C程序和Informix數(shù)據(jù)庫處理的源文件2.2.2 文件頭的注釋/* *文件名:FileName *文件功能:Function *編程者:Xxx

8、xx Mmmmmm *初作時(shí)間:Original Time *版本:1.0 * *時(shí)間修改者注釋 *1998/09/29xxxx初期作成 *1998/10/04yyyy功能追加/修改*/2.2.3 源文件的構(gòu)成關(guān)聯(lián)性很強(qiáng)的函數(shù)、變量應(yīng)集中在同一源文件中描述。源文件中共同的定義和說明應(yīng)集中在一個(gè)頭文件中描述。一個(gè)源文件的大小一般應(yīng)盡量控制在2000行以內(nèi)。2.2.4 文件分類存放:建議按如下目錄存放文件:($home)/src:存放系統(tǒng)程序源代碼;($home)/bin:存放系統(tǒng)可執(zhí)行文件;($home)/etc:存放系統(tǒng)配置文件;($home)/log:存放系統(tǒng)運(yùn)行記錄文件;第三節(jié) 函數(shù)命名規(guī)

9、則及構(gòu)成2.3.1 函數(shù)命名:自編函數(shù)應(yīng)當(dāng)與系統(tǒng)函數(shù)、標(biāo)準(zhǔn)函數(shù)區(qū)分開來,以便讀者從函數(shù)名上就可以區(qū)分出是否為自編函數(shù)。建議給可分類的函數(shù)加前綴。 函數(shù)描述的每個(gè)單詞首字母大寫其余字母小寫,單詞之間直接連接,不加下劃線。int PUB_PrintReset(void); /* 公共函數(shù) */int PRT_PrintLine(void); /* 打印函數(shù) */int PrintReset(void);/* 一般函數(shù) */2.3.2 函數(shù)頭的注釋函數(shù)頭的注釋里應(yīng)包括:函數(shù)名、功能、作者、參數(shù)說明、完成日期和維護(hù)時(shí)間,維護(hù)者, 維護(hù)簡(jiǎn)要說明。調(diào)用的調(diào)用自定義函數(shù)、全局變量盡量寫清楚,程序的處理流程比

10、較復(fù)雜可在注釋里簡(jiǎn)單闡述。還可以有其他需要說明的欄目。/* *函數(shù)名:Function Name *函數(shù)功能:Function Function *編程者:Xxxx Mmmm *輸入?yún)?shù):char * sDataStream - Datas Send to Printer *int iDataLen- Length of Send Datas *char cPrnDev - 0x01 Printer component; *- 0x02 Feature component; *char *sDevStatus- Device Status Read From Printer *輸出參數(shù): *返

11、回值: *調(diào)用自定義函數(shù):Call self-defined Function List *處理概要:Process * 全局變量:Extern Variable and Meaning *修改的全局變量:Update Extern Variable *完成時(shí)間:1998-04-17 *最后修改時(shí)間:1998-04-17*/2.3.3 函數(shù)體的書寫格式為了使程序具有良好的可讀性,必須對(duì)語句的書寫格式及空格、空行的應(yīng)用進(jìn)行了明確的規(guī)定。 (1)每個(gè)函數(shù)不應(yīng)太長(zhǎng),建議在300行以內(nèi); (2)“”和“”要分別占一行,并且對(duì)齊; (3)函數(shù)內(nèi),實(shí)現(xiàn)同一功能的語句與前后其他語句用空行分開,便于閱讀; (

12、4)不建議寫長(zhǎng)語句,以便程序的閱讀和輸出; (5)程序的相鄰層次的語句之前的留空個(gè)數(shù)一般為一個(gè)TAB鍵,編輯器中一個(gè)TAB鍵設(shè)置為四個(gè)空格。 (6)在程序行末的注釋最好對(duì)齊; (7)注釋必須以“/* . .*/”括起來,不可以用“/”,主要目的是保證程序的可移植性; (8)程序里,表達(dá)式之間應(yīng)用空格,以分隔清楚; (9)盡量不用難理解的語句。 (10) 如果一對(duì)中間的語句超過20行,結(jié)束的符號(hào)要求指出起始的位置。 (11) strcmp,memcmp要用0 ,來表示相等。int Test(int c_argc, char * c_argv ) int i;/* 變量說明 */ /* 本段程序說

13、明 */for (i=0; i< c_argc; i+) /* . */ if (strcmp(c_argvi, "display") = 0) /* . */ statemeents; statemeents; InitialSomething();/* . */2.3.4 函數(shù)返回函數(shù)返回一般都為整型。如果用返回值表示結(jié)果時(shí),返回值為0,表示函數(shù)執(zhí)行正常;返回值小于0,表示函數(shù)執(zhí)行錯(cuò)誤。第四節(jié) 語句的書寫格式2.4.1 SWITCH語句的書寫格式(case 和 switch差兩列,語句和case差兩列)switch(ch)case 1:/* 注釋 */statem

14、ents;break;case 2:/* 注釋 */statements;break;default:/* 注釋 */statements; break;2.4.2 IF語句的書寫格式 if (條件)/* 注釋 */ statements; else if (條件)/* 注釋 */ statements; else/* 注釋 */ statements; 2.4.3 WHILE語句的書寫格式 while(條件)/* 注釋 */ statements; 2.4.4 DO語句的書寫格式 do statements; while (條件);/* 注釋 */2.4.5 FOR語句的書寫格式 for(.

15、; .; .)/* 注釋 */ statements; 2.4.6 函數(shù)的書寫格式 int func(int x,char *y) int p,q; /* 注釋 */ /* 注釋 */ statements; 第五節(jié) 常量變量及庫表結(jié)構(gòu)命名2.5.1 常量命名常量包括宏定義和自定義類型,常量名必須大寫。#defineNUL0typedef struct statements; MYSTRU;2.5.2 變量命名變量應(yīng)盡量按它所表示的內(nèi)容來命名,且變量名的長(zhǎng)度要合適,最好為3 15個(gè)字符,循環(huán)變量可以用ijk等單個(gè)字母表示。如果變量名由幾個(gè)單詞表示,則單詞首字母大寫。全局變量加前綴g_,參數(shù)加前

16、綴c_。int g_iPrnStat;/* 全局變量 */int c_iPrnStat;/* 函數(shù)參數(shù) */char cPrnStat;/* 局部變量 */根據(jù)“匈牙利命名法”,將一個(gè)變量名由以下幾部分構(gòu)成:前綴描述符+名稱其中,前綴描述符說明標(biāo)識(shí)符的類型,用小寫字母,名稱說明標(biāo)識(shí)符的作用,從變量名中我們可以明白,該變量是整型(int),表示字符串的長(zhǎng)度。前綴描述符的定義如下表所示:序號(hào)數(shù)據(jù)類型前綴描述符1.Charc2.unsigned charuc3.Inti4.Shortsh5.Longl6.Floatf7.Booleanb8.Handleh9.Unsignedu10.Pointerp1

17、1.Doubled12.函數(shù)指針pf13.Structst14.Arraya15.Voidv16.Unsigned Shortus17以0結(jié)尾的字符數(shù)組acz18以0結(jié)尾的字符指針pcz19FILE *fp20二維指針pp21.二維數(shù)組aa22.系統(tǒng)通過typedef定義的整數(shù)t23.typedef定義的類型T第六節(jié) 程序的變更格式2.6.1 程序的更改文件提交以后,程序的修改須按以下格式進(jìn)行。(1)在文件頭的注釋中進(jìn)行登記 * *時(shí)間修改者注釋 *1998/09/29xxxx初期作成 *1998/10/04yyyy修改內(nèi)容1 *1998/10/09zzzz修改內(nèi)容2*/(2)段落刪除/* d

18、eleted by XY 1998/10/12 */盡量用/*/來注釋,如果實(shí)在需要用條件編譯來封住一段程序,用以下風(fēng)格:#ifdef DELETE001 所需刪除的段落#endif /*endif DELETE001*/(3)段落增加/* added by XY 1998/10/12 begin */ 所需增加的段落/* added by XY 1998/10/12 end*/(4)段落修改 如果是大段需要修改則用下面方法:/* modified del by XY 1998/10/12 beginmodified del by XY 1998/10/12 end */* modified

19、add by XY 1998/10/12 begin*/* modified add by XY 1998/10/12 end*/或者#ifdef MOD_DEL_001#endif /*endif MOD_DEL_001*/* modified add by XY 1998/10/12 begin*/* modified add by XY 1998/10/12 end*/如果只有一兩行修改,則直接按下面進(jìn)行:/* modified by XY 1998/10/12 begin*/*old */ new/* modified by XY 1998/10/12 end*/原則上程序修改后要在段

20、落旁邊加注修改原因。2.6.2 程序版本的修改程序初次提交,版本號(hào)為1.0。程序以后每次修改,都要在程序里標(biāo)示,提交時(shí)根據(jù)改動(dòng)大小,版本號(hào)升級(jí)。當(dāng)程序穩(wěn)定后,再次提交可將修改后的不必要的程序及其標(biāo)示、注釋刪除。第七節(jié) 其他格式2.7.1 條件編譯語句的使用使用調(diào)試時(shí),調(diào)試語句應(yīng)寫在#ifdef DEBUG和#endif之間,這樣,只需簡(jiǎn)單地改變編譯命令行參數(shù)就可以刪除或使用調(diào)試語句。與操作系統(tǒng)或開發(fā)環(huán)境有關(guān)的部分應(yīng)當(dāng)寫在條件編譯語句之中,這樣便于系統(tǒng)的移植。例如:在制作可用SCO UNIX和AIX下軟件時(shí),依賴于SCO UNIX的部分應(yīng)寫在#ifdef SCO和#endif之間,而依賴于AIX

21、的部分應(yīng)寫在#ifdef AIX和#endif之間。2.7.2 有關(guān)內(nèi)嵌SQL語句的規(guī)范在應(yīng)用中,常常需要內(nèi)嵌SQL 語句完成對(duì)數(shù)據(jù)庫的訪問,使用時(shí)應(yīng)遵循如下規(guī)范:所有SQL語句的開頭必須使用“EXEC SQL ”,以同一般C語句區(qū)別;主變量前必須使用“:”。宣告必須用下面形式EXEC SQL BEGIN DECLARE SECTION;EXEC SQL END DECLARE SECTION;游標(biāo)主變量要在FETCH時(shí)指定,不要在declare時(shí)指定第八節(jié) 函數(shù)例程/* * 函數(shù)名 : ConvertPoolToMsgFromMsg * 函數(shù)功能 : 從數(shù)據(jù)存儲(chǔ)池打包 * 編程者 : zfx

22、 * 輸入?yún)?shù) : ptMessage c_pMessageBuf 字符串存儲(chǔ)地址指針 char *c_iMessageBufLen 字符串長(zhǎng)度int c_iMessageBufLen 字符串格式代號(hào) * 輸出參數(shù) : * 返回值 :<0 失敗 >0 包長(zhǎng)度 * 調(diào)用自定義函數(shù) : * 處理概要 : * 全局變量 : * 修改的全局變量 : * 完成時(shí)間 : 2002/02/02 * 最后修改時(shí)間 : 2002/02/02*/int ConPoolToEucpRecvDefMsg(ptMessage c_stMessage,char * c_pMessageBuf,int c_iM

23、essageBufLen)int iTotalLen=0; int iSysHeadLen=0;char aczSysHead129; int iPubHeadLen=0;char aczPubHead129; int iRecvDataLen=0;char aczRecvData4097; memset(aczRecvData,0,sizeof(aczRecvData);iRecvDataLen=PutRecvData(aczRecvData,c_stMessage);if ( iRecvDataLen < 0 )return iRecvDataLen;iTotalLen=iTotal

24、Len+iRecvDataLen; memset(aczPubHead,0,sizeof(aczPubHead);iPubHeadLen=PutRecvPubHead(aczPubHead);if ( iPubHeadLen < 0 )return iPubHeadLen;iTotalLen=iTotalLen+iPubHeadLen; memset(aczSysHead,0,sizeof(aczSysHead);iSysHeadLen=PutSysHead(aczSysHead,iTotalLen);if ( iSysHeadLen < 0 )return iSysHeadLen;iTotalLen=iTotalLen+iSysHeadLen; memcpy(c_pMessageBuf,aczSysHead,iSysHeadLen);memcpy(c_pMessageBuf+iSysHeadLen,aczPubHead,iPubHeadLen);memcpy(c_pMessageBuf+iSysHeadLen+iPubHeadLen, aczRecvData,iRecvDataLen); return iTotalLen;第九節(jié) Makefile文件例程# 文件功能:PowerL

溫馨提示

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