![[計(jì)算機(jī)軟件及應(yīng)用]C和C++編碼規(guī)范_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/1/07c2ed9d-1582-45dd-b262-57a729d7dac9/07c2ed9d-1582-45dd-b262-57a729d7dac91.gif)
![[計(jì)算機(jī)軟件及應(yīng)用]C和C++編碼規(guī)范_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/1/07c2ed9d-1582-45dd-b262-57a729d7dac9/07c2ed9d-1582-45dd-b262-57a729d7dac92.gif)
![[計(jì)算機(jī)軟件及應(yīng)用]C和C++編碼規(guī)范_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/1/07c2ed9d-1582-45dd-b262-57a729d7dac9/07c2ed9d-1582-45dd-b262-57a729d7dac93.gif)
![[計(jì)算機(jī)軟件及應(yīng)用]C和C++編碼規(guī)范_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/1/07c2ed9d-1582-45dd-b262-57a729d7dac9/07c2ed9d-1582-45dd-b262-57a729d7dac94.gif)
![[計(jì)算機(jī)軟件及應(yīng)用]C和C++編碼規(guī)范_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/1/07c2ed9d-1582-45dd-b262-57a729d7dac9/07c2ed9d-1582-45dd-b262-57a729d7dac95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.C/C+編碼規(guī)則文件狀態(tài):草稿公開類型:內(nèi)部公開文檔編號(hào):當(dāng)前版本:V1.0作 者:制作部門:終端軟件研發(fā)部完成日期:2012年07月08日;- 77 -編寫與修改記錄版本號(hào)完成日期更改位置更改內(nèi)容編制/修改審批V1.02012.07.08全文初稿C/C+編碼規(guī)則V1.0 目 錄章節(jié)目錄第1章前言- 7 -第2章RULECHECKER規(guī)則集- 7 -2.1基本規(guī)則集- 7 -2.1.1ansi 函數(shù)的聲明和定義要遵守ANSI規(guī)定的格式- 7 -2.1.2asscal 在函數(shù)調(diào)用語句中不要使用賦值操作符- 8 -2.1.3asscon 不要在控制語句的條件表達(dá)式中使用賦值操作符- 9 -2.1
2、.4assexp 賦值表達(dá)式中的規(guī)定- 9 -2.1.5blockdecl 在語句塊的頭部定義變量- 10 -2.1.6boolean 使用正確格式的布爾表達(dá)式- 10 -2.1.7brkcont 程序中禁用break、continue- 11 -2.1.8classuse 對(duì)未知類成員的使用- 11 -2.1.9cmclass一個(gè)源文件只對(duì)應(yīng)一個(gè)類- 12 -2.1.10cmdef 源文件中不要有類的聲明- 12 -2.1.11condop 關(guān)于"? . : ." 操作符- 12 -2.1.12const 使用常量- 13 -2.1.13constrcpy 關(guān)于拷貝構(gòu)造函
3、數(shù)- 14 -2.1.14constrdef 關(guān)于默認(rèn)構(gòu)造函數(shù)- 14 -2.1.15ctrlblock 清晰劃分控制語句的語句塊- 15 -2.1.16destr 關(guān)于析構(gòu)函數(shù)- 15 -2.1.17dmaccess 類數(shù)據(jù)成員的訪問控制- 16 -2.1.18exprcplx 表達(dá)式的復(fù)雜性- 16 -2.1.19exprparenth 在表達(dá)式中使用括號(hào)- 17 -2.1.20fntype 必須為函數(shù)返回值指定類型- 18 -2.1.21frndclass 關(guān)于友員的聲明位置- 18 -2.1.22funcres 設(shè)置禁止使用的函數(shù)- 18 -2.1.23goto 禁用Goto語句- 1
4、9 -2.1.24Headercom 對(duì)文件注釋的要求- 20 -2.1.25headercom 函數(shù)、類的注釋- 21 -2.1.26hmclass 一個(gè)頭文件中只聲明一個(gè)類- 21 -2.1.27hmdef 頭文件中只包含聲明,不應(yīng)包含實(shí)現(xiàn)- 21 -2.1.28hmstruct 避免重復(fù)包含頭文件- 22 -2.1.29identfmt 對(duì)命名的要求- 23 -2.1.30identl 對(duì)標(biāo)識(shí)符長(zhǎng)度的要求- 23 -2.1.31identres 設(shè)置禁止使用的標(biāo)識(shí)符- 24 -2.1.32imptype 明確指定類型- 24 -2.1.33incltype 設(shè)置可包含的文件- 24 -2
5、.1.34inldef 關(guān)于內(nèi)聯(lián)函數(shù)的聲明和定義- 25 -2.1.35macrocharset 在宏中禁用某些字符- 25 -2.1.36macroparenth 括號(hào)在宏中的使用- 26 -2.1.37mconst 限制宏常量的使用- 26 -2.1.38mfunc 用內(nèi)聯(lián)函數(shù)代替宏函數(shù)- 27 -2.1.39mname 文件命名- 28 -2.1.40multiass 一條程序語句中只應(yīng)包含一個(gè)賦值操作符- 29 -2.1.41nopreproc 限制使用編譯指令- 29 -2.1.42nostruct 不要使用結(jié)構(gòu)體- 30 -2.1.43notemplate 不要使用模板- 30 -
6、2.1.44nothrow 不要拋擲異常- 30 -2.1.45nounion 不要使用聯(lián)合體- 30 -2.1.46operass 為類重載“=”操作符- 31 -2.1.47parammode 明確標(biāo)識(shí)出函數(shù)參數(shù)的類型- 31 -2.1.48parse 分析錯(cuò)誤- 32 -2.1.49ptraccess 指針指向的數(shù)據(jù)成員的訪問方式- 32 -2.1.50ptrinit 對(duì)指針的初始化- 32 -2.1.51sectord "public", "private"和"protected" 的聲明順序- 33 -2.1.52sganc
7、str 擁有共同的基類- 35 -2.1.53sgdecl 一次只聲明、定義一個(gè)變量- 35 -2.1.54sglreturn 一個(gè)函數(shù)應(yīng)該只有一條return語句- 35 -2.1.55slcom 注釋使用“/”- 36 -2.1.56slstat 一行只寫一條語句- 36 -2.1.57swdef switch語句中的default分支- 37 -2.1.58swend 對(duì)switch語句中每個(gè)分支結(jié)尾的要求- 37 -2.1.59typeinher 明確指明派生類與基類的關(guān)系- 38 -2.1.60typeres 設(shè)置禁用的類型- 38 -2.1.61vararg 禁止函數(shù)使用可變數(shù)量的
8、參數(shù)- 39 -2.1.62varstruct 關(guān)于定義struct、union變量- 39 -2.2Scott Meyers 規(guī)則集- 40 -2.2.1assignthis 在"="操作符定義中檢查是否自己賦值給自己- 40 -2.2.2cast Prefer 盡量使用C+風(fēng)格的類型轉(zhuǎn)換- 41 -2.2.3catchref 通過引用捕獲異常- 41 -2.2.4constrinit 盡量在構(gòu)造函數(shù)的初始化列表中對(duì)數(shù)據(jù)成員初始化- 42 -2.2.5convnewdel 重載new、delete操作符時(shí)應(yīng)遵守的約定- 42 -2.2.6dataptr 指針數(shù)據(jù)成員- 4
9、3 -2.2.7delifnew 如果你重載了操作符"new",也應(yīng)該重載操作符 "delete"- 43 -2.2.8excepspec 審慎使用異常處理- 43 -2.2.9inlinevirt 內(nèi)聯(lián)虛擬函數(shù)- 43 -2.2.10multinher 盡量不要使用多繼承- 44 -2.2.11nonleafabs 將非末端類設(shè)計(jì)為抽象類- 44 -2.2.12normalnew 不要遮掩了"new"的正規(guī)形式- 45 -2.2.13overload 不要重載“&&”、“|”、“,”- 45 -2.2.14prepo
10、st “+”、“-”操作符前綴形式與后綴形式的區(qū)別- 45 -2.2.15refclass 類的引用- 46 -2.2.16returnthis 在重載“=”時(shí),使其返回*this- 46 -2.2.17tryblock Try語句塊- 47 -2.2.18trydestr 析構(gòu)函數(shù)中的異常處理- 47 -2.2.19virtdestr 虛擬析構(gòu)函數(shù)(Virtual destructor)- 47 -2.2.20assignthis(Check for Assignment to "self" in Operator "=" )- 48 -2.2.21c
11、ast(c+風(fēng)格的類型轉(zhuǎn)換 )- 48 -2.2.22dataptr(數(shù)據(jù)的指針類型)- 48 -2.2.23delarray (Use square brackets when deleting arrays to ensure full array is deallocated)- 49 -2.2.24exprparenth(Parenthesses should be used to indicate evaluation order)- 50 -2.2.25forinit (循環(huán)的計(jì)數(shù)器(在for循環(huán)中)必須在循環(huán)的初始化語句段中初始化)- 51 -2.2.26funcptr(不使用函
12、數(shù)指針)- 51 -2.2.27globinit (全局變量必須在定義的時(shí)候初始化)- 52 -2.2.28multinher(Multiple Inheritance Only Allowed for Inheriting Abstract )- 52 -2.2.29nonleafabs (Make non-leaf classes abstract)- 52 -2.2.30nostruct- 52 -2.2.31pmfrtn (不返回指針成員數(shù)據(jù))- 53 -2.2.32refclass (類的引用)- 53 -2.2.33rtnlocptr (不能返回一個(gè)指向一個(gè)非靜態(tài)局部變量)- 53
13、 -2.2.34vararg vararg(Variable Number of Arguments )- 53 -2.2.35varinit(參數(shù)在使用前要初始化 )- 53 -2.2.36varstruct(Struct 和 Union 變量 )- 54 -2.2.37voidptr(沒有空指針)- 55 -2.3MISRA C規(guī)則集- 55 -2.3.1Operator defined.操作符定義.- 55 -2.3.2Pointer arithmetic算術(shù)指針- 56 -2.3.3Limitation of the reference complexity- 56 -2.3.4Rel
14、ational operators and pointers操作符和指針之間的連系- 56 -2.3.5Pointers to functions函數(shù)指針- 56 -2.3.6Pointers to functions.- 56 -2.3.7Address assignment.地址分配- 57 -2.3.8Null pointer.空指針- 57 -2.3.9structures 和 unions成員- 57 -2.3.10Variable storage.變量存儲(chǔ)- 57 -2.3.11Identifiers must not exceed 31 characters.標(biāo)識(shí)符不要超過31個(gè)
15、字符- 57 -2.3.12Unions access. Union訪問- 58 -2.3.13Type of bitfields.位域類型- 58 -2.3.14Two bits long bit fields.位域兩字節(jié)長(zhǎng)度- 58 -2.3.15Members of structure and unions shall be named.- 58 -2.3.16Define and undef standard names.- 58 -2.3.17Standard library functions.標(biāo)準(zhǔn)庫函數(shù)- 59 -2.3.18Dynamic heap memory.動(dòng)態(tài)分配內(nèi)存-
16、 59 -2.3.19Error indicator errno. 錯(cuò)誤指示errno- 59 -2.3.20Name of identifiers.標(biāo)識(shí)符命名- 59 -2.3.21No offsetof macro.- 60 -2.3.22No <locale.h> functions.- 60 -2.3.23No setjmp macro or longjmp function.- 60 -2.3.24No <signal.h> functions.- 60 -2.3.25No <stdio.h> functions.- 60 -2.3.26No at
17、of, atoi or atol functions.- 61 -2.3.27No abort, exit, getenv or system functions.- 61 -2.3.28No <time.h> functions.- 61 -2.3.29Type char is not allowed- 62 -2.3.30Underlying representation of floating point numbers.- 62 -2.3.31Typedef names shall not be reused.- 62 -2.3.32Numeric constants an
18、d suffixes.- 63 -2.3.33Octal constants. 八進(jìn)制常量- 63 -2.3.34Declaration before use.- 64 -2.3.35Identifiers scope.- 64 -2.3.36Object declarations.- 64 -2.3.37Functions declaration.- 65 -2.3.38External definition of identifiers.- 65 -2.3.39External variables declaration.- 65 -2.3.40register storage class
19、 specifier.- 66 -2.3.41Use of tags.- 66 -2.3.42Structured initialisation.結(jié)構(gòu)初始化- 66 -2.3.43Enum Initialisation數(shù)組初始化- 66 -2.3.44Side effects in condition- 67 -2.3.45Logical Operand.- 67 -2.3.46Bitwise operations shall not be performed on signed integer types.- 67 -2.3.47Shift operator and right hand o
20、perand.- 68 -2.3.48The unary minus operator shall not be applied to an unsigned expression.- 68 -2.3.49Operator sizeof.- 68 -2.3.50Operator ',' not allowed.- 69 -2.3.51Conversions.- 69 -2.3.52Redundant casts.- 69 -2.3.53Cast and pointers.- 69 -2.3.54Evaluation order of expressions.- 69 -2.3.
21、55Mixed precision arithmetic and cast.- 69 -2.3.56Test between floats.- 70 -2.3.57Inaccessible code not authorized.- 70 -2.3.58Non-null statements.- 70 -2.3.59Location of null statements.- 71 -2.3.60No Labels.- 71 -2.3.61Use of curly brackets- 71 -2.3.62Then and else parts of if statements must not
22、be void- 71 -2.3.63Default statement mandatory in a switch.- 72 -2.3.64No switch with only one case.- 72 -2.3.65Floating point variables should not be used as loop counters.- 72 -2.3.66Loop control.- 72 -2.3.67Counter in for statements- 72 -2.3.68Functions shall always be declared at file scope.- 73
23、 -2.3.69No functions with variable number of arguments.- 73 -2.3.70Trigraphs are forbidden.- 73 -2.3.71Recursion not recommended- 73 -2.3.72Function prototyping.- 74 -2.3.73Matching numbers of parameters.- 74 -2.3.74Values of void functions.- 74 -2.3.75Void expressions and function parameters.- 74 -
24、2.3.76Return in non-void functions.- 74 -2.3.77Return in void functions.- 74 -2.3.78Function with no parameters.- 75 -2.3.79Multibyte characters.- 75 -2.3.80No nested comments.- 75 -2.3.81Define and undefine in a block.- 75 -2.3.82Use of #undef.- 75 -2.3.83Functions and macros.- 75 -2.3.84Arguments
25、to function-like macros.- 76 -2.3.85Parentheses for macro occurences.- 76 -2.3.86Parentheses for macro.- 76 -2.3.87Identifiers in pre-processor directives.- 76 -2.3.88Directive pragma.- 76 -2.3.89Forbidden #include.- 77 -2.3.90Use of void type and functions.- 77 -2.3.91#include syntax.- 77 -第1章 前言本文
26、擋詳細(xì)描述了在LogiscopeRulechecker中包含的所有編碼規(guī)范。對(duì)每一條編碼規(guī)范,分別給出了它的名稱、規(guī)范的內(nèi)容描述、參數(shù)(只針對(duì)可設(shè)置的規(guī)范)、遵守規(guī)范的好處以及示例。Rulechecker共包含81條編碼規(guī)范,其中有30條左右可以對(duì)其內(nèi)容進(jìn)行定制,對(duì)于可定制編碼規(guī)范的具體定制方法,可參見RuleChecker可定制規(guī)則。第2章 Rulechecker規(guī)則集Rulechecker規(guī)則集分為兩大部分:基本規(guī)則集和Scott Meyers規(guī)則集。我們先來逐條介紹基本規(guī)則集中的規(guī)則。2.1 基本規(guī)則集2.1.1 ansi 函數(shù)的聲明和定義要遵守ANSI規(guī)定的格式規(guī)則描述: 函數(shù)聲明和定
27、義的格式,要符合ANSI規(guī)定的格式要求。它要求滿足以下兩項(xiàng)中的一項(xiàng): name:為函數(shù)參數(shù)列表中的參數(shù)指定數(shù)據(jù)類型和參數(shù)名稱。 void: 禁止函數(shù)參數(shù)列表為空。在RuleChecker的默認(rèn)情況下,以上兩項(xiàng)同時(shí)生效。參數(shù): 可供選擇的字符串,“name”和“void”。目的: 提高代碼的可讀性,改善可移植性。舉例:正確寫法錯(cuò)誤寫法f(int a, char *b) . f(int a, char *b); f(void);f(a, b)int a;char *b . f(int, char*);f();2.1.2 asscal 在函數(shù)調(diào)用語句中不要使用賦值操作符規(guī)則描述:
28、 函數(shù)調(diào)用語句中,在函數(shù)的參數(shù)列表中不要使用賦值操作符。賦值操作符包括=, +=, -=, *=, /=, %=, >>=, <<=, &=, |=, =,+,-。目的:避免產(chǎn)生不明確的賦值順序。舉例:正確寫法錯(cuò)誤寫法void fun1(int a);void fun2(int b) fun1( +b );2.1.3 asscon 不要在控制語句的條件表達(dá)式中使用賦值操作符規(guī)則描述:不要在控制語句if, while, for 和 switch的條件表達(dá)式中使用賦值操作符。賦值操作符包括:=, +=, -=, *=, /=, %=, >>=, <
29、<=, &=, |=, =,+,-。目的:一個(gè)類似于 if (x=y)這樣的寫法是不明確、不清晰的,代碼的作者也許是想寫成這樣: if (x=y)。舉例:正確寫法錯(cuò)誤寫法x -= dx;if (x) . for (i=j=n; i > 0; i-, j-) .if (x -= dx) . for (i=j=n; -i > 0; j-) .2.1.4 assexp 賦值表達(dá)式中的規(guī)定規(guī)則描述:在一個(gè)賦值表達(dá)式中: 一個(gè)左值,在表達(dá)式中應(yīng)該僅被賦值一次。對(duì)于多重賦值表達(dá)式,一個(gè)左值在表達(dá)式中僅應(yīng)出現(xiàn)一次,不能重復(fù)出現(xiàn)。目的:避免產(chǎn)生不明確的賦值順序。舉例:正確寫法錯(cuò)誤寫法
30、b=c+a;a=b;a=b=c+a;2.1.5 blockdecl 在語句塊的頭部定義變量規(guī)則描述:變量的定義要出現(xiàn)在使用該變量的語句塊的開頭。目的:提高代碼的可讀性。2.1.6 boolean 使用正確格式的布爾表達(dá)式規(guī)則描述:對(duì)于if, while, for等控制語句的布爾表達(dá)式,要使用正確的格式。目的: 使代碼更容易理解。舉例:正確寫法錯(cuò)誤寫法AlwaysTrue = true;while (AlwaysTrue = true) if (test = true) for (i=1; function_call(i) = true; i+) while (1) if (test) for
31、(i=1; function_call(i); i+) 2.1.7 brkcont 程序中禁用break、continue規(guī)則描述:在控制語句 (for, do, while) 塊中,禁止使用Break和continue。不過,在switch語句塊中,可以使用break。目的:和goto語句一樣, 使用Break和continue會(huì)打亂代碼結(jié)構(gòu)化的流程。在循環(huán)語句塊中禁用goto、Break和continue,會(huì)增加代碼的可讀性。2.1.8 classuse 對(duì)未知類成員的使用規(guī)則描述:在代碼中不要使用如下形式的表達(dá)式 :u.v.a, u.v.f(),u.g().a, u.g().f(),也不
32、要有使用“->”操作符的類似形式的表達(dá)式。目的:防止類對(duì)象通過多級(jí)的“.”、“->”操作符,調(diào)用未知的成員函數(shù)、數(shù)據(jù)成員。類與類之間的接口應(yīng)該清晰。舉例:/不要象下面這樣寫代碼:myWindow.itsButton.push();其中,對(duì)象myWindow的基類為類Window,itsButto是Window的一個(gè)公共數(shù)據(jù)成員,它也是一個(gè)類對(duì)象,itsButto有一個(gè)叫做push()的公共成員函數(shù)。我們應(yīng)該清楚的是,類Window才是myWindow訪問其的接口,myWindow 只應(yīng)訪問到itsButton,而不應(yīng)該訪問到itsButton.push()這一級(jí),因?yàn)閜ush()已
33、經(jīng)不屬于基類Window對(duì)myWindow的接口。再舉一個(gè)例子:Error.pos.line;這和上面例子的道理一樣,只是這一次由訪問成員函數(shù)變?yōu)榱嗽L問數(shù)據(jù)成員line,這同樣是不好的。2.1.9 cmclass一個(gè)源文件只對(duì)應(yīng)一個(gè)類規(guī)則描述:在一個(gè)源文件中定義的每一個(gè)函數(shù),都應(yīng)該屬于同一個(gè)類,即對(duì)一個(gè)類的描述要獨(dú)占一個(gè)文件。其中,源文件指以*.cc, *.cxx, *.cpp, *.C or *.c為后綴的代碼文件。參數(shù):可供選擇的字符串,包括*.cc, *.cxx, *.cpp, *.C or *.c,用來設(shè)置檢查什么類型的代碼文件。目的:提高代碼的可讀性。2.1.10 cmdef 源文件
34、中不要有類的聲明規(guī)則描述:在一個(gè)源文件中不應(yīng)該包含任何類的聲明,而只應(yīng)該是對(duì)類的實(shí)現(xiàn),類聲明應(yīng)該統(tǒng)一放到頭文件中去。其中,源文件指以*.cc, *.cxx, *.cpp, *.C or *.c為后綴的代碼文件。參數(shù):可供選擇的字符串,包括*.cc, *.cxx, *.cpp, *.C or *.c,用來設(shè)置檢查什么類型的代碼文件。目的:提高代碼的可讀性。2.1.11 condop 關(guān)于"? . : ." 操作符規(guī)則描述:程序中不要使用三元運(yùn)算符“? : ”。目的:提高代碼的可讀性。2.1.12 const 使用常量規(guī)則描述:程序中的數(shù)字和字符串,都要顯示的聲明、定義為常量。
35、在RuleChecker默認(rèn)的情況下,只允許程序中直接出現(xiàn)下面這四個(gè)數(shù)字和字符串量,它們分別是:""(空字符串), " "(只包含一個(gè)空格的字符串), "0"(數(shù)字0)和 "1"(數(shù)字1)。其它任何的數(shù)字和字符串,都要定義為常量。參數(shù):可供選擇的字符串,用來指出那些允許在程序中直接出現(xiàn),而不必以常量定義的數(shù)字和字符串。目的:這樣做可以避免數(shù)字和字符串零散分布在代碼中,使代碼修改起來相當(dāng)費(fèi)力。遵守這項(xiàng)規(guī)則可以提高代碼的可維護(hù)性。注意:在對(duì)某些量的初始化列表中 (比如數(shù)組、結(jié)構(gòu)體),RuleChecker僅會(huì)對(duì)其前5個(gè)
36、數(shù)據(jù)成員依照該項(xiàng)規(guī)則進(jìn)行檢查。舉例:正確寫法錯(cuò)誤寫法#define TAB_SIZE 100enum i_val ok =7; ko =11;const char HelloWorld = "Hello World.n"char tabTAB_SIZE;i_val i;.if (i = ok) p = HelloWorld; char tab100;int i;.if (i = 7) p = "Hello World.n"2.1.13 constrcpy 關(guān)于拷貝構(gòu)造函數(shù)規(guī)則描述:每一個(gè)類都應(yīng)該顯示的定義拷貝構(gòu)造函數(shù)。參數(shù):參數(shù)只有一個(gè),要么為空,要么為
37、字符串"dynalloc"。如果設(shè)置參數(shù)為"dynalloc",那么RuleChecker僅在當(dāng)類中包含指針類型的數(shù)據(jù)成員時(shí),才要求類要顯示定義拷貝構(gòu)造函數(shù);如果設(shè)置參數(shù)為空,則不管類中包含什么樣的成員,都要顯示定義拷貝構(gòu)造函數(shù)。目的:確保類的編寫者考慮類對(duì)象在被拷貝時(shí)可能出現(xiàn)的各種情況。舉例:class aClass .aClass(const aClass &object); / "const" 并不是必須的.;2.1.14 constrdef 關(guān)于默認(rèn)構(gòu)造函數(shù)規(guī)則描述: 每一個(gè)類都應(yīng)該顯示的定義默認(rèn)構(gòu)造函數(shù)。目的:確保類
38、的編寫者考慮類對(duì)象初始化時(shí)可能出現(xiàn)的各種情況。舉例:class aClass .aClass();.;2.1.15 ctrlblock 清晰劃分控制語句的語句塊規(guī)則描述:控制語句(if , for , while , do.whule).的語句部分一定要用 和 括起來,以劃分出清晰的語句塊。目的:這樣做,能夠使語句的歸屬明確,使代碼更加容易閱讀和修改。舉例:正確寫法錯(cuò)誤寫法if (x = 0) return; else while (x > min) x-;if (x = 0) return;elsewhile (x > min)x-;2.1.16 destr 關(guān)于析構(gòu)函數(shù)規(guī)則描述
39、: 每一個(gè)類都應(yīng)該顯示的定義析構(gòu)函數(shù)。目的:確保類的編寫者考慮類對(duì)象在析構(gòu)時(shí),可能出現(xiàn)的各種情況。舉例:class aClass .aClass(aClass &object);.;2.1.17 dmaccess 類數(shù)據(jù)成員的訪問控制規(guī)則描述:類對(duì)外的接口應(yīng)該是完全功能化的,也就是類中可以定義Public的成員函數(shù),但不應(yīng)該有Public的數(shù)據(jù)成員。在RuleChecker默認(rèn)情況下,會(huì)檢查類中是否聲明了Public數(shù)據(jù)成員,如果有,則視為違反了該條規(guī)則。參數(shù):參數(shù)是public、protected、privatr這三個(gè)字符串。通過指定相應(yīng)的字符串,RuleChecker就會(huì)禁止類中聲
40、明與之相對(duì)應(yīng)的數(shù)據(jù)成員。目的:要想改變對(duì)象的當(dāng)前狀態(tài),應(yīng)該通過它的成員函數(shù)來實(shí)現(xiàn),而不應(yīng)該通過直接設(shè)置它的數(shù)據(jù)成員。一個(gè)類的數(shù)據(jù)成員應(yīng)該聲明為private的,最起碼也應(yīng)該是protected的。2.1.18 exprcplx 表達(dá)式的復(fù)雜性規(guī)則描述:對(duì)于表達(dá)式的復(fù)雜性,要有一定的限制。表達(dá)式的復(fù)雜性通過一個(gè)叫做關(guān)聯(lián)語法樹(associated syntactictree)的指標(biāo)來衡量,它的計(jì)算方法為:表達(dá)式中操作符的數(shù)量加上操作數(shù)的數(shù)量再加1。在RuleChecker默認(rèn)情況下,表達(dá)式復(fù)雜性的上限被設(shè)定為13。參數(shù):是一個(gè)數(shù)字,用來指定表達(dá)式復(fù)雜性的最大可接受程度。目的:提高代碼的可讀性。舉
41、例:對(duì)于下面這個(gè)表達(dá)式:(b+c*d) + (b*f(c)*d)它包含了8個(gè)操作符,7個(gè)操作數(shù),因此該表達(dá)式關(guān)聯(lián)語法樹為16。如果你設(shè)定的參數(shù)的上限小于等于16,則RuleChecker會(huì)認(rèn)為此表達(dá)式違反了該條規(guī)則。2.1.19 exprparenth 在表達(dá)式中使用括號(hào)規(guī)則描述:對(duì)于一個(gè)表達(dá)式,在每一個(gè)二元、三元操作的開始和結(jié)束處,都要放置“(”和“)”。在RuleChecker中,我們可以通過放置partpar參數(shù)來減少一些限制。放置partpar參數(shù)后:當(dāng)在操作符"+" 或"*"右邊的操作數(shù)的右邊又使用了"+" 或"*
42、"操作符時(shí),可以不放置“(”和“)”;對(duì)賦值操作符右邊的操作數(shù),可以忽略“(”和“)”;在表達(dá)式的最外層也可以忽略“(”和“)”。除此之外的其它情況,都要放置“(”和“)”。在RuleChecker默認(rèn)情況下,參數(shù)partpar被設(shè)置。參數(shù):參數(shù)為字符串"partpar",如果放置了該參數(shù),則RuleChecker不按照最嚴(yán)格的要求檢測(cè)代碼,而是按我們上面提到的要求來檢測(cè)代碼。否則,按照最嚴(yán)格的要求檢測(cè)代碼。目的:避免出現(xiàn)不明確的運(yùn)算、賦值順序。舉例:正確寫法錯(cuò)誤寫法result = (fact / 100) + rem);/當(dāng)放置了partpar參數(shù)時(shí),也可以寫
43、成這樣result = (fact / 100) + rem;/當(dāng)放置了partpar參數(shù)時(shí),可以用下面的寫法result = (fact * ind * 100) + rem + 10 + (coeff * c);/ 代替如下的寫法result = (fact * (ind * 100) + (rem + (10 + (coeff * c);result = fact / 100 + rem;2.1.20 fntype 必須為函數(shù)返回值指定類型規(guī)則描述:要為每一個(gè)函數(shù)指定它的返回值類型。如果函數(shù)沒有返回值,則要定義返回類型為void。目的:改善代碼的可移植性。2.1.21 frndclass
44、 關(guān)于友員的聲明位置規(guī)則描述:如果將一個(gè)(或若干個(gè))類聲明為另一個(gè)類的友員,則必須將這個(gè)(這些)友員聲明放在類所有數(shù)據(jù)成員聲明的最前面。2.1.22 funcres 設(shè)置禁止使用的函數(shù)規(guī)則描述:禁止在程序中聲明、定義、調(diào)用我們指定函數(shù)名的函數(shù)。在RuleChecker默認(rèn)情況下,不禁用任何的函數(shù)名。參數(shù):參數(shù)是一系列的字符串列表,其中的每個(gè)字符串就是在程序中要禁用的函數(shù)的名字。目的:通過禁用一些只與特定平臺(tái)相關(guān)聯(lián)的函數(shù),可以提高程序的可移植性。除此之外,你還可以通過設(shè)定該規(guī)則來實(shí)現(xiàn)一些其它的目的,比如禁用某些極易導(dǎo)致程序發(fā)生錯(cuò)誤的函數(shù),等等。舉例:如果我們?cè)O(shè)置了在程序中禁用函數(shù)fun(int
45、nCount),則在代碼中出現(xiàn)下面的任何一種情況, RuleChecker都會(huì)認(rèn)定程序違反了該條規(guī)則。Void fun (int nCount);/聲明Void fun (int nCount)/定義.fun ( 1 );/調(diào)用2.1.23 goto 禁用Goto語句規(guī)則描述:程序中不要使用goto語句。在RuleChecker默認(rèn)情況下,出現(xiàn)在程序任何地方的goto語句都是被禁止的。不過,我們可以通過設(shè)置,使得goto跳轉(zhuǎn)到我們指定的語句行號(hào)的語句為合法。參數(shù):參數(shù)是一個(gè)字符串的列表,每個(gè)字符串都代表一個(gè)語句行號(hào),表示允許在程序中通過goto跳轉(zhuǎn)到該語句行號(hào)。目的:這條規(guī)則的目的是為了確保程
46、序的結(jié)構(gòu)化,因?yàn)闉E用goto語句會(huì)使程序流程無規(guī)則,可讀性差。Goto語句只在一種情況下有使用價(jià)值,就是當(dāng)要從多重循環(huán)深處跳轉(zhuǎn)到循環(huán)之外時(shí),效率很高,但對(duì)于一般要求的軟件,沒有必要費(fèi)勁心思追求多么高的效率,而且效率主要是取決于算法,而不在于個(gè)別的語句技巧。2.1.24 Headercom 對(duì)文件注釋的要求規(guī)則描述:在頭文件、實(shí)現(xiàn)文件的首部一定要有文件注釋。在RuleChecker中,我們還可以規(guī)定這個(gè)文件注釋的具體格式。在RuleChecker默認(rèn)情況下,頭文件和實(shí)現(xiàn)文件的文件注釋中必須包括:文件名、開發(fā)者、開發(fā)日期、功能簡(jiǎn)介這四部分,都是以英文表示的(見下面的示例),我們也可以設(shè)置成中文。參
47、數(shù):參數(shù)由兩個(gè)字符串列表來表示:第一部分是對(duì)頭文件的文件注釋格式要求,第二部分是對(duì)實(shí)現(xiàn)文件的文件注釋格式要求。每個(gè)列表都是以"HEADER" 或"CODE"開頭,后面是對(duì)注釋格式的具體描述。目的:提高代碼的可讀性。舉例:下面是一個(gè)符合RuleChecker默認(rèn)的對(duì)頭文件文件注釋格式要求的例子:/ Name: program/ Author: Andrieu/ Date: 08/07/96/ Remarks: example of comments/2.1.25 headercom 函數(shù)、類的注釋規(guī)則描述:在全局、靜態(tài)函數(shù)的聲明、定義和類的聲明、定義之前,
48、要對(duì)該函數(shù)或類加以注釋。在RuleChecker中,我們還可以規(guī)定這個(gè)文件注釋的格式,RuleChecker默認(rèn)情況下,在函數(shù)或類之前必須有以“/”開頭的注釋,注釋內(nèi)容不限。參數(shù):參數(shù)是五個(gè)字符串列表,這五個(gè)字符串列表分別以“class”、 "func_glob_def" 、"func_glob_decl"、"func_stat_def"、"func_stat_decl"開頭,分別代表聲明類、定義全局函數(shù)、聲明全局函數(shù)、定義靜態(tài)函數(shù)、聲明靜態(tài)函數(shù),后面跟著的就是對(duì)注釋格式的具體要求。目的:提高代碼的可讀性。2.1.
49、26 hmclass 一個(gè)頭文件中只聲明一個(gè)類規(guī)則描述:在一個(gè)頭文件中,只應(yīng)該包含對(duì)一個(gè)類的聲明(嵌套類的情況除外)。RuleChecker默認(rèn)情況下,頭文件是指以.h、.hh、.H、.hxx、.hpp為后綴的文件。參數(shù):參數(shù)是可供選擇的字符串,比如.h、.hh、.H等,用來設(shè)置檢查什么類型的代碼文件。目的:提高代碼的可讀性。2.1.27 hmdef 頭文件中只包含聲明,不應(yīng)包含實(shí)現(xiàn)規(guī)則描述:在頭文件中不要定義全局變量和全局函數(shù)。在RuleChecker默認(rèn)情況下,頭文件指以.h、 .hh、.H、 .hxx、.hpp為后綴的代碼文件。參數(shù):參數(shù)為可供選擇的字符串,包括*.h, *.hh,*.H
50、, *.hxx、*.hpp,用來設(shè)置檢查什么類型的代碼文件。目的:在頭文件中只應(yīng)該包含各種聲明,而不應(yīng)該包含具體的實(shí)現(xiàn)。2.1.28 hmstruct 避免重復(fù)包含頭文件規(guī)則描述:頭文件的格式應(yīng)該為:#ifndef <IDENT>#define <IDENT>.#endif或者#if !defined (<IDENT>)#define <IDENT>.#endif上面的<IDENT>是一個(gè)標(biāo)識(shí)字符串。RuleChecker要求在該標(biāo)識(shí)字符串中必須包含相應(yīng)頭文件的文件名,不區(qū)分大小寫。參數(shù):參數(shù)有兩個(gè),一個(gè)用于設(shè)置標(biāo)識(shí)字符串的長(zhǎng)度,另一
51、個(gè)參數(shù)設(shè)置檢查什么類型的代碼文件。目的:避免對(duì)同一頭文件的重復(fù)包含。舉例:/ 對(duì)于文件audit.h,它的文件結(jié)構(gòu)應(yīng)該為:#ifndef AUDIT_H#define AUDIT_H.#endif2.1.29 identfmt 對(duì)命名的要求規(guī)則描述:在程序中聲明、定義的函數(shù)、自定義數(shù)據(jù)類型、變量,在對(duì)其命名時(shí)都應(yīng)該遵守一個(gè)統(tǒng)一的命名規(guī)范。在RuleChecker默認(rèn)情況下,只規(guī)定在常量、宏中不能使用小寫的英文字母。參數(shù):參數(shù)是一系列的字符串,單數(shù)編號(hào)字符串指出了你要設(shè)定的對(duì)象,雙數(shù)字符串指出了你為其設(shè)定的具體格式。目的:提高代碼的可讀性。2.1.30 identl 對(duì)標(biāo)識(shí)符長(zhǎng)度的要求規(guī)則描述:
52、在程序中聲明、定義的函數(shù)、自定義數(shù)據(jù)類型、變量,它們的名稱的長(zhǎng)度要在設(shè)定的范圍之內(nèi)。RuleChecker默認(rèn)情況下規(guī)定:函數(shù)名長(zhǎng)度在4到25個(gè)字符之間,自定義數(shù)據(jù)類型名、變量名、常量名、宏名、類名長(zhǎng)度在5到25個(gè)字符之間,其它標(biāo)識(shí)符的長(zhǎng)度在1到25個(gè)字符之間。參數(shù):參數(shù)分三列,第一列指出了你要設(shè)定的對(duì)象,第二列、第三類指出了命名的長(zhǎng)度范圍。目的:提高代碼的可讀性。2.1.31 identres 設(shè)置禁止使用的標(biāo)識(shí)符規(guī)則描述:某些標(biāo)識(shí)符在代碼中應(yīng)該被禁用。比如,類庫中的某些數(shù)據(jù)成員的名字。在RuleChecker默認(rèn)情況下,不禁用任何標(biāo)識(shí)符。參數(shù):參數(shù)是一系列的字符串列表,其中的每個(gè)字符串就是
53、在程序中要禁用的標(biāo)識(shí)符。目的:改善代碼的可移植性。2.1.32 imptype 明確指定類型規(guī)則描述:要明確指定函數(shù)、函數(shù)參數(shù)、類數(shù)據(jù)成員、變量的類型。目的:改善代碼的可移植性。舉例:正確寫法錯(cuò)誤寫法void aFunction(void);aFunction();2.1.33 incltype 設(shè)置可包含的文件規(guī)則描述:只允許在指定類型的代碼文件中包含其它代碼文件。在RuleChecker默認(rèn)情況下,只允許頭文件被包含到其它代碼文件中去。參數(shù):參數(shù)為兩個(gè)字符串列表,每個(gè)列表中的第一個(gè)字符串指定了目標(biāo)文件的類型,第二個(gè)字符串指出了都有那些類型的文件可以被包含到該目標(biāo)文件中去。目的:改善程序代碼
54、的組織結(jié)構(gòu)。2.1.34 inldef 關(guān)于內(nèi)聯(lián)函數(shù)的聲明和定義規(guī)則描述:內(nèi)聯(lián)函數(shù)的定義部分,要放到類的實(shí)現(xiàn)文件(.cpp)中去,而不要直接放在頭文件中。參數(shù):參數(shù)只有一個(gè),字符串“private”,該參數(shù)可以用也可以不用。當(dāng)放置了“private”這個(gè)字符串時(shí),private型內(nèi)聯(lián)函數(shù)的定義要放到類的實(shí)現(xiàn)文件(.cpp)中去,其它內(nèi)聯(lián)函數(shù)的定義要放在頭文件中;當(dāng)沒有放置這個(gè)字符串時(shí),所有的內(nèi)聯(lián)函數(shù)的定義部分,都要放到實(shí)現(xiàn)文件(.cpp)中去。目的:提高代碼的可讀性。該規(guī)則存在的問題:放置參數(shù)“private”后并不起作用。不管是否放置了“private”字符串,該規(guī)則都會(huì)要求將所有內(nèi)聯(lián)函數(shù)的定義放到實(shí)現(xiàn)文件(.cpp)中去。2.1.35 macrocharset 在宏中禁用某些字符規(guī)則描述:可以在宏中(這里的宏只包括宏函數(shù)和宏常量這兩類宏,并且檢查部分只是指宏的展開部分,而不包括宏的名字)禁用某些字符。在RuleChecker默認(rèn)情況下,不禁用任何字符。參數(shù):參數(shù)為兩對(duì)相互關(guān)聯(lián)的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)不干膠標(biāo)簽行業(yè)市場(chǎng)前景展望及投資規(guī)模研究報(bào)告
- 2025年中國(guó)無菌耳穴撳針市場(chǎng)調(diào)查研究報(bào)告
- 2025屆四川省成都市蓉城名校聯(lián)考高三上學(xué)期開學(xué)考-數(shù)學(xué)試題(含答案)
- 5.客流變化規(guī)律項(xiàng)目一運(yùn)營(yíng)計(jì)劃學(xué)習(xí)車站行車計(jì)劃77課件
- 2025年中國(guó)數(shù)顯式電子萬能試驗(yàn)機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 2025-2030年中國(guó)互聯(lián)網(wǎng)彩票業(yè)投資模式分析與發(fā)展戰(zhàn)略規(guī)劃預(yù)測(cè)研究報(bào)告
- 肇慶市實(shí)驗(yàn)中學(xué)高中歷史一:第課專制集權(quán)的不斷加強(qiáng)教案
- 2025-2030年中國(guó)ORC發(fā)電行業(yè)發(fā)展趨勢(shì)展望與投資策略研究報(bào)告
- 新疆鐵道職業(yè)技術(shù)學(xué)院《藝術(shù)教育美術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025年中國(guó)組合式大氣反吹扁袋除塵器市場(chǎng)調(diào)查研究報(bào)告
- 港口生產(chǎn)過程中安全生產(chǎn)事故隱患點(diǎn)控制及預(yù)防課件
- 英語連讀發(fā)音技巧講解課件
- 幼兒園外出活動(dòng)安全目標(biāo)責(zé)任書
- 幼兒營(yíng)養(yǎng)膳食調(diào)查問卷(4篇)
- 自身免疫性腦炎課件
- 外科圍手術(shù)期護(hù)理試題及答案
- 案場(chǎng)物業(yè)服務(wù)月度考核表
- 石材檢測(cè)報(bào)告
- 清風(fēng)搖影梅花易斷例整理解讀
- 俄標(biāo)閥門結(jié)構(gòu)長(zhǎng)度_圖文
- 裝飾工程施工進(jìn)度表18975
評(píng)論
0/150
提交評(píng)論