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

下載本文檔

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

文檔簡介

1、C/C+編碼規(guī)則文件狀態(tài):草稿公開類型:內(nèi)部公開文檔編號(hào):當(dāng)前版本:V1.0作 者:制作部門:終端軟件研發(fā)部完成日期:2012年07月08日編寫與修改記錄版本號(hào)完成日期更改位置更改內(nèi)容編制/修改審批V1.02012.07.08全文初稿目 錄章節(jié)目錄 TOC o 1-3 h z u HYPERLINK l _Toc329337391 第1章前言 PAGEREF _Toc329337391 h - 7 - HYPERLINK l _Toc329337392 第2章Rulechecker規(guī)則集 PAGEREF _Toc329337392 h - 7 - HYPERLINK l _Toc3293373

2、93 2.1基本規(guī)則集 PAGEREF _Toc329337393 h - 7 - HYPERLINK l _Toc329337394 ansi 函數(shù)的聲明和定義要遵守ANSI規(guī)定的格式 PAGEREF _Toc329337394 h - 7 - HYPERLINK l _Toc329337395 asscal 在函數(shù)調(diào)用語句中不要使用賦值操作符 PAGEREF _Toc329337395 h - 8 - HYPERLINK l _Toc329337396 asscon 不要在控制語句的條件表達(dá)式中使用賦值操作符 PAGEREF _Toc329337396 h - 9 - HYPERLINK

3、l _Toc329337397 assexp 賦值表達(dá)式中的規(guī)定 PAGEREF _Toc329337397 h - 9 - HYPERLINK l _Toc329337398 blockdecl 在語句塊的頭部定義變量 PAGEREF _Toc329337398 h - 10 - HYPERLINK l _Toc329337399 boolean 使用正確格式的布爾表達(dá)式 PAGEREF _Toc329337399 h - 10 - HYPERLINK l _Toc329337400 brkcont 程序中禁用break、continue PAGEREF _Toc329337400 h -

4、11 - HYPERLINK l _Toc329337401 classuse 對(duì)未知類成員的使用 PAGEREF _Toc329337401 h - 11 - HYPERLINK l _Toc329337402 cmclass一個(gè)源文件只對(duì)應(yīng)一個(gè)類 PAGEREF _Toc329337402 h - 12 - HYPERLINK l _Toc329337403 cmdef 源文件中不要有類的聲明 PAGEREF _Toc329337403 h - 12 - HYPERLINK l _Toc329337404 condop 關(guān)于? . : . 操作符 PAGEREF _Toc329337404

5、 h - 12 - HYPERLINK l _Toc329337405 const 使用常量 PAGEREF _Toc329337405 h - 13 - HYPERLINK l _Toc329337406 constrcpy 關(guān)于拷貝構(gòu)造函數(shù) PAGEREF _Toc329337406 h - 14 - HYPERLINK l _Toc329337407 constrdef 關(guān)于默認(rèn)構(gòu)造函數(shù) PAGEREF _Toc329337407 h - 14 - HYPERLINK l _Toc329337408 ctrlblock 清晰劃分控制語句的語句塊 PAGEREF _Toc329337408

6、 h - 15 - HYPERLINK l _Toc329337409 destr 關(guān)于析構(gòu)函數(shù) PAGEREF _Toc329337409 h - 15 - HYPERLINK l _Toc329337410 dmaccess 類數(shù)據(jù)成員的訪問控制 PAGEREF _Toc329337410 h - 16 - HYPERLINK l _Toc329337411 exprcplx 表達(dá)式的復(fù)雜性 PAGEREF _Toc329337411 h - 16 - HYPERLINK l _Toc329337412 exprparenth 在表達(dá)式中使用括號(hào) PAGEREF _Toc329337412

7、 h - 17 - HYPERLINK l _Toc329337413 fntype 必須為函數(shù)返回值指定類型 PAGEREF _Toc329337413 h - 18 - HYPERLINK l _Toc329337414 frndclass 關(guān)于友員的聲明位置 PAGEREF _Toc329337414 h - 18 - HYPERLINK l _Toc329337415 funcres 設(shè)置禁止使用的函數(shù) PAGEREF _Toc329337415 h - 18 - HYPERLINK l _Toc329337416 goto 禁用Goto語句 PAGEREF _Toc329337416

8、 h - 19 - HYPERLINK l _Toc329337417 Headercom 對(duì)文件注釋的要求 PAGEREF _Toc329337417 h - 20 - HYPERLINK l _Toc329337418 headercom 函數(shù)、類的注釋 PAGEREF _Toc329337418 h - 21 - HYPERLINK l _Toc329337419 hmclass 一個(gè)頭文件中只聲明一個(gè)類 PAGEREF _Toc329337419 h - 21 - HYPERLINK l _Toc329337420 hmdef 頭文件中只包含聲明,不應(yīng)包含實(shí)現(xiàn) PAGEREF _Toc

9、329337420 h - 21 - HYPERLINK l _Toc329337421 hmstruct 避免重復(fù)包含頭文件 PAGEREF _Toc329337421 h - 22 - HYPERLINK l _Toc329337422 identfmt 對(duì)命名的要求 PAGEREF _Toc329337422 h - 23 - HYPERLINK l _Toc329337423 identl 對(duì)標(biāo)識(shí)符長度的要求 PAGEREF _Toc329337423 h - 23 - HYPERLINK l _Toc329337424 identres 設(shè)置禁止使用的標(biāo)識(shí)符 PAGEREF _Toc

10、329337424 h - 24 - HYPERLINK l _Toc329337425 imptype 明確指定類型 PAGEREF _Toc329337425 h - 24 - HYPERLINK l _Toc329337426 incltype 設(shè)置可包含的文件 PAGEREF _Toc329337426 h - 24 - HYPERLINK l _Toc329337427 inldef 關(guān)于內(nèi)聯(lián)函數(shù)的聲明和定義 PAGEREF _Toc329337427 h - 25 - HYPERLINK l _Toc329337428 macrocharset 在宏中禁用某些字符 PAGEREF

11、_Toc329337428 h - 25 - HYPERLINK l _Toc329337429 macroparenth 括號(hào)在宏中的使用 PAGEREF _Toc329337429 h - 26 - HYPERLINK l _Toc329337430 mconst 限制宏常量的使用 PAGEREF _Toc329337430 h - 26 - HYPERLINK l _Toc329337431 mfunc 用內(nèi)聯(lián)函數(shù)代替宏函數(shù) PAGEREF _Toc329337431 h - 27 - HYPERLINK l _Toc329337432 mname 文件命名 PAGEREF _Toc32

12、9337432 h - 28 - HYPERLINK l _Toc329337433 multiass 一條程序語句中只應(yīng)包含一個(gè)賦值操作符 PAGEREF _Toc329337433 h - 29 - HYPERLINK l _Toc329337434 nopreproc 限制使用編譯指令 PAGEREF _Toc329337434 h - 29 - HYPERLINK l _Toc329337435 nostruct 不要使用結(jié)構(gòu)體 PAGEREF _Toc329337435 h - 30 - HYPERLINK l _Toc329337436 notemplate 不要使用模板 PAGE

13、REF _Toc329337436 h - 30 - HYPERLINK l _Toc329337437 nothrow 不要拋擲異常 PAGEREF _Toc329337437 h - 30 - HYPERLINK l _Toc329337438 nounion 不要使用聯(lián)合體 PAGEREF _Toc329337438 h - 30 - HYPERLINK l _Toc329337439 operass 為類重載“=”操作符 PAGEREF _Toc329337439 h - 31 - HYPERLINK l _Toc329337440 parammode 明確標(biāo)識(shí)出函數(shù)參數(shù)的類型 PAG

14、EREF _Toc329337440 h - 31 - HYPERLINK l _Toc329337441 parse 分析錯(cuò)誤 PAGEREF _Toc329337441 h - 32 - HYPERLINK l _Toc329337442 ptraccess 指針指向的數(shù)據(jù)成員的訪問方式 PAGEREF _Toc329337442 h - 32 - HYPERLINK l _Toc329337443 ptrinit 對(duì)指針的初始化 PAGEREF _Toc329337443 h - 32 - HYPERLINK l _Toc329337444 sectord public, private

15、和protected 的聲明順序 PAGEREF _Toc329337444 h - 33 - HYPERLINK l _Toc329337445 sgancstr 擁有共同的基類 PAGEREF _Toc329337445 h - 35 - HYPERLINK l _Toc329337446 sgdecl 一次只聲明、定義一個(gè)變量 PAGEREF _Toc329337446 h - 35 - HYPERLINK l _Toc329337447 sglreturn 一個(gè)函數(shù)應(yīng)該只有一條return語句 PAGEREF _Toc329337447 h - 35 - HYPERLINK l _To

16、c329337448 slcom 注釋使用“/” PAGEREF _Toc329337448 h - 36 - HYPERLINK l _Toc329337449 slstat 一行只寫一條語句 PAGEREF _Toc329337449 h - 36 - HYPERLINK l _Toc329337450 swdef switch語句中的default分支 PAGEREF _Toc329337450 h - 37 - HYPERLINK l _Toc329337451 swend 對(duì)switch語句中每個(gè)分支結(jié)尾的要求 PAGEREF _Toc329337451 h - 37 - HYPER

17、LINK l _Toc329337452 typeinher 明確指明派生類與基類的關(guān)系 PAGEREF _Toc329337452 h - 38 - HYPERLINK l _Toc329337453 typeres 設(shè)置禁用的類型 PAGEREF _Toc329337453 h - 38 - HYPERLINK l _Toc329337454 vararg 禁止函數(shù)使用可變數(shù)量的參數(shù) PAGEREF _Toc329337454 h - 39 - HYPERLINK l _Toc329337455 varstruct 關(guān)于定義struct、union變量 PAGEREF _Toc329337

18、455 h - 39 - HYPERLINK l _Toc329337456 2.2Scott Meyers 規(guī)則集 PAGEREF _Toc329337456 h - 40 - HYPERLINK l _Toc329337457 assignthis 在=操作符定義中檢查是否自己賦值給自己 PAGEREF _Toc329337457 h - 40 - HYPERLINK l _Toc329337458 cast Prefer 盡量使用C+風(fēng)格的類型轉(zhuǎn)換 PAGEREF _Toc329337458 h - 41 - HYPERLINK l _Toc329337459 catchref 通過引用

19、捕獲異常 PAGEREF _Toc329337459 h - 41 - HYPERLINK l _Toc329337460 constrinit 盡量在構(gòu)造函數(shù)的初始化列表中對(duì)數(shù)據(jù)成員初始化 PAGEREF _Toc329337460 h - 42 - HYPERLINK l _Toc329337461 convnewdel 重載new、delete操作符時(shí)應(yīng)遵守的約定 PAGEREF _Toc329337461 h - 42 - HYPERLINK l _Toc329337462 dataptr 指針數(shù)據(jù)成員 PAGEREF _Toc329337462 h - 43 - HYPERLINK

20、l _Toc329337463 delifnew 如果你重載了操作符new,也應(yīng)該重載操作符 delete PAGEREF _Toc329337463 h - 43 - HYPERLINK l _Toc329337464 excepspec 審慎使用異常處理 PAGEREF _Toc329337464 h - 43 - HYPERLINK l _Toc329337465 inlinevirt 內(nèi)聯(lián)虛擬函數(shù) PAGEREF _Toc329337465 h - 43 - HYPERLINK l _Toc329337466 multinher 盡量不要使用多繼承 PAGEREF _Toc329337

21、466 h - 44 - HYPERLINK l _Toc329337467 nonleafabs 將非末端類設(shè)計(jì)為抽象類 PAGEREF _Toc329337467 h - 44 - HYPERLINK l _Toc329337468 normalnew 不要遮掩了new的正規(guī)形式 PAGEREF _Toc329337468 h - 45 - HYPERLINK l _Toc329337469 overload 不要重載“&”、“|”、“,” PAGEREF _Toc329337469 h - 45 - HYPERLINK l _Toc329337470 prepost “+”、“-”操作符

22、前綴形式與后綴形式的區(qū)別 PAGEREF _Toc329337470 h - 45 - HYPERLINK l _Toc329337471 refclass 類的引用 PAGEREF _Toc329337471 h - 46 - HYPERLINK l _Toc329337472 returnthis 在重載“=”時(shí),使其返回*this PAGEREF _Toc329337472 h - 46 - HYPERLINK l _Toc329337473 tryblock Try語句塊 PAGEREF _Toc329337473 h - 47 - HYPERLINK l _Toc329337474

23、trydestr 析構(gòu)函數(shù)中的異常處理 PAGEREF _Toc329337474 h - 47 - HYPERLINK l _Toc329337475 virtdestr 虛擬析構(gòu)函數(shù)(Virtual destructor) PAGEREF _Toc329337475 h - 47 - HYPERLINK l _Toc329337476 assignthis(Check for Assignment to self in Operator = ) PAGEREF _Toc329337476 h - 48 - HYPERLINK l _Toc329337477 cast(c+風(fēng)格的類型轉(zhuǎn)換 )

24、 PAGEREF _Toc329337477 h - 48 - HYPERLINK l _Toc329337478 dataptr(數(shù)據(jù)的指針類型) PAGEREF _Toc329337478 h - 48 - HYPERLINK l _Toc329337479 delarray (Use square brackets when deleting arrays to ensure full array is deallocated) PAGEREF _Toc329337479 h - 49 - HYPERLINK l _Toc329337480 exprparenth(Parenthesse

25、s should be used to indicate evaluation order) PAGEREF _Toc329337480 h - 50 - HYPERLINK l _Toc329337481 forinit (循環(huán)的計(jì)數(shù)器(在for循環(huán)中)必須在循環(huán)的初始化語句段中初始化) PAGEREF _Toc329337481 h - 51 - HYPERLINK l _Toc329337482 funcptr(不使用函數(shù)指針) PAGEREF _Toc329337482 h - 51 - HYPERLINK l _Toc329337483 globinit (全局變量必須在定義的時(shí)候初

26、始化) PAGEREF _Toc329337483 h - 52 - HYPERLINK l _Toc329337484 multinher(Multiple Inheritance Only Allowed for Inheriting Abstract ) PAGEREF _Toc329337484 h - 52 - HYPERLINK l _Toc329337485 nonleafabs (Make non-leaf classes abstract) PAGEREF _Toc329337485 h - 52 - HYPERLINK l _Toc329337486 nostruct PA

27、GEREF _Toc329337486 h - 52 - HYPERLINK l _Toc329337487 pmfrtn (不返回指針成員數(shù)據(jù)) PAGEREF _Toc329337487 h - 53 - HYPERLINK l _Toc329337488 refclass (類的引用) PAGEREF _Toc329337488 h - 53 - HYPERLINK l _Toc329337489 rtnlocptr (不能返回一個(gè)指向一個(gè)非靜態(tài)局部變量) PAGEREF _Toc329337489 h - 53 - HYPERLINK l _Toc329337490 vararg va

28、rarg(Variable Number of Arguments ) PAGEREF _Toc329337490 h - 53 - HYPERLINK l _Toc329337491 varinit(參數(shù)在使用前要初始化 ) PAGEREF _Toc329337491 h - 53 - HYPERLINK l _Toc329337492 varstruct(Struct 和 Union 變量 ) PAGEREF _Toc329337492 h - 54 - HYPERLINK l _Toc329337493 voidptr(沒有空指針) PAGEREF _Toc329337493 h - 5

29、5 - HYPERLINK l _Toc329337494 2.3MISRA C規(guī)則集 PAGEREF _Toc329337494 h - 55 - HYPERLINK l _Toc329337495 Operator defined.操作符定義. PAGEREF _Toc329337495 h - 55 - HYPERLINK l _Toc329337496 Pointer arithmetic算術(shù)指針 PAGEREF _Toc329337496 h - 56 - HYPERLINK l _Toc329337497 Limitation of the reference complexity

30、 PAGEREF _Toc329337497 h - 56 - HYPERLINK l _Toc329337498 Relational operators and pointers操作符和指針之間的連系 PAGEREF _Toc329337498 h - 56 - HYPERLINK l _Toc329337499 Pointers to functions函數(shù)指針 PAGEREF _Toc329337499 h - 56 - HYPERLINK l _Toc329337500 Pointers to functions. PAGEREF _Toc329337500 h - 56 - HYP

31、ERLINK l _Toc329337501 Address assignment.地址分配 PAGEREF _Toc329337501 h - 57 - HYPERLINK l _Toc329337502 Null pointer.空指針 PAGEREF _Toc329337502 h - 57 - HYPERLINK l _Toc329337503 structures 和 unions成員 PAGEREF _Toc329337503 h - 57 - HYPERLINK l _Toc329337504 Variable storage.變量存儲(chǔ) PAGEREF _Toc329337504

32、 h - 57 - HYPERLINK l _Toc329337505 Identifiers must not exceed 31 characters.標(biāo)識(shí)符不要超過31個(gè)字符 PAGEREF _Toc329337505 h - 57 - HYPERLINK l _Toc329337506 Unions access. Union訪問 PAGEREF _Toc329337506 h - 58 - HYPERLINK l _Toc329337507 Type of bitfields.位域類型 PAGEREF _Toc329337507 h - 58 - HYPERLINK l _Toc32

33、9337508 Two bits long bit fields.位域兩字節(jié)長度 PAGEREF _Toc329337508 h - 58 - HYPERLINK l _Toc329337509 Members of structure and unions shall be named. PAGEREF _Toc329337509 h - 58 - HYPERLINK l _Toc329337510 Define and undef standard names. PAGEREF _Toc329337510 h - 58 - HYPERLINK l _Toc329337511 Standar

34、d library functions.標(biāo)準(zhǔn)庫函數(shù) PAGEREF _Toc329337511 h - 59 - HYPERLINK l _Toc329337512 Dynamic heap memory.動(dòng)態(tài)分配內(nèi)存 PAGEREF _Toc329337512 h - 59 - HYPERLINK l _Toc329337513 Error indicator errno. 錯(cuò)誤指示errno PAGEREF _Toc329337513 h - 59 - HYPERLINK l _Toc329337514 Name of identifiers.標(biāo)識(shí)符命名 PAGEREF _Toc32933

35、7514 h - 59 - HYPERLINK l _Toc329337515 No offsetof macro. PAGEREF _Toc329337515 h - 60 - HYPERLINK l _Toc329337516 No functions. PAGEREF _Toc329337516 h - 60 - HYPERLINK l _Toc329337517 No setjmp macro or longjmp function. PAGEREF _Toc329337517 h - 60 - HYPERLINK l _Toc329337518 No functions. PAGER

36、EF _Toc329337518 h - 60 - HYPERLINK l _Toc329337519 No functions. PAGEREF _Toc329337519 h - 60 - HYPERLINK l _Toc329337520 No atof, atoi or atol functions. PAGEREF _Toc329337520 h - 61 - HYPERLINK l _Toc329337521 No abort, exit, getenv or system functions. PAGEREF _Toc329337521 h - 61 - HYPERLINK l

37、_Toc329337522 No functions. PAGEREF _Toc329337522 h - 61 - HYPERLINK l _Toc329337523 Type char is not allowed PAGEREF _Toc329337523 h - 62 - HYPERLINK l _Toc329337524 Underlying representation of floating point numbers. PAGEREF _Toc329337524 h - 62 - HYPERLINK l _Toc329337525 Typedef names shall not

38、 be reused. PAGEREF _Toc329337525 h - 62 - HYPERLINK l _Toc329337526 Numeric constants and suffixes. PAGEREF _Toc329337526 h - 63 - HYPERLINK l _Toc329337527 Octal constants. 八進(jìn)制常量 PAGEREF _Toc329337527 h - 63 - HYPERLINK l _Toc329337528 Declaration before use. PAGEREF _Toc329337528 h - 64 - HYPERLI

39、NK l _Toc329337529 Identifiers scope. PAGEREF _Toc329337529 h - 64 - HYPERLINK l _Toc329337530 Object declarations. PAGEREF _Toc329337530 h - 64 - HYPERLINK l _Toc329337531 Functions declaration. PAGEREF _Toc329337531 h - 65 - HYPERLINK l _Toc329337532 External definition of identifiers. PAGEREF _To

40、c329337532 h - 65 - HYPERLINK l _Toc329337533 External variables declaration. PAGEREF _Toc329337533 h - 65 - HYPERLINK l _Toc329337534 register storage class specifier. PAGEREF _Toc329337534 h - 66 - HYPERLINK l _Toc329337535 Use of tags. PAGEREF _Toc329337535 h - 66 - HYPERLINK l _Toc329337536 Stru

41、ctured initialisation.結(jié)構(gòu)初始化 PAGEREF _Toc329337536 h - 66 - HYPERLINK l _Toc329337537 Enum Initialisation數(shù)組初始化 PAGEREF _Toc329337537 h - 66 - HYPERLINK l _Toc329337538 Side effects in condition PAGEREF _Toc329337538 h - 67 - HYPERLINK l _Toc329337539 Logical Operand. PAGEREF _Toc329337539 h - 67 - HY

42、PERLINK l _Toc329337540 Bitwise operations shall not be performed on signed integer types. PAGEREF _Toc329337540 h - 67 - HYPERLINK l _Toc329337541 Shift operator and right hand operand. PAGEREF _Toc329337541 h - 68 - HYPERLINK l _Toc329337542 The unary minus operator shall not be applied to an unsi

43、gned expression. PAGEREF _Toc329337542 h - 68 - HYPERLINK l _Toc329337543 Operator sizeof. PAGEREF _Toc329337543 h - 68 - HYPERLINK l _Toc329337544 Operator , not allowed. PAGEREF _Toc329337544 h - 69 - HYPERLINK l _Toc329337545 Conversions. PAGEREF _Toc329337545 h - 69 - HYPERLINK l _Toc329337546 R

44、edundant casts. PAGEREF _Toc329337546 h - 69 - HYPERLINK l _Toc329337547 Cast and pointers. PAGEREF _Toc329337547 h - 69 - HYPERLINK l _Toc329337548 Evaluation order of expressions. PAGEREF _Toc329337548 h - 69 - HYPERLINK l _Toc329337549 Mixed precision arithmetic and cast. PAGEREF _Toc329337549 h

45、- 69 - HYPERLINK l _Toc329337550 Test between floats. PAGEREF _Toc329337550 h - 70 - HYPERLINK l _Toc329337551 Inaccessible code not authorized. PAGEREF _Toc329337551 h - 70 - HYPERLINK l _Toc329337552 Non-null statements. PAGEREF _Toc329337552 h - 70 - HYPERLINK l _Toc329337553 Location of null sta

46、tements. PAGEREF _Toc329337553 h - 71 - HYPERLINK l _Toc329337554 No Labels. PAGEREF _Toc329337554 h - 71 - HYPERLINK l _Toc329337555 Use of curly brackets PAGEREF _Toc329337555 h - 71 - HYPERLINK l _Toc329337556 Then and else parts of if statements must not be void PAGEREF _Toc329337556 h - 71 - HY

47、PERLINK l _Toc329337557 Default statement mandatory in a switch. PAGEREF _Toc329337557 h - 72 - HYPERLINK l _Toc329337558 No switch with only one case. PAGEREF _Toc329337558 h - 72 - HYPERLINK l _Toc329337559 Floating point variables should not be used as loop counters. PAGEREF _Toc329337559 h - 72

48、- HYPERLINK l _Toc329337560 Loop control. PAGEREF _Toc329337560 h - 72 - HYPERLINK l _Toc329337561 Counter in for statements PAGEREF _Toc329337561 h - 72 - HYPERLINK l _Toc329337562 Functions shall always be declared at file scope. PAGEREF _Toc329337562 h - 73 - HYPERLINK l _Toc329337563 No function

49、s with variable number of arguments. PAGEREF _Toc329337563 h - 73 - HYPERLINK l _Toc329337564 Trigraphs are forbidden. PAGEREF _Toc329337564 h - 73 - HYPERLINK l _Toc329337565 Recursion not recommended PAGEREF _Toc329337565 h - 73 - HYPERLINK l _Toc329337566 Function prototyping. PAGEREF _Toc3293375

50、66 h - 74 - HYPERLINK l _Toc329337567 Matching numbers of parameters. PAGEREF _Toc329337567 h - 74 - HYPERLINK l _Toc329337568 Values of void functions. PAGEREF _Toc329337568 h - 74 - HYPERLINK l _Toc329337569 Void expressions and function parameters. PAGEREF _Toc329337569 h - 74 - HYPERLINK l _Toc3

51、29337570 Return in non-void functions. PAGEREF _Toc329337570 h - 74 - HYPERLINK l _Toc329337571 Return in void functions. PAGEREF _Toc329337571 h - 74 - HYPERLINK l _Toc329337572 Function with no parameters. PAGEREF _Toc329337572 h - 75 - HYPERLINK l _Toc329337573 Multibyte characters. PAGEREF _Toc3

52、29337573 h - 75 - HYPERLINK l _Toc329337574 No nested comments. PAGEREF _Toc329337574 h - 75 - HYPERLINK l _Toc329337575 Define and undefine in a block. PAGEREF _Toc329337575 h - 75 - HYPERLINK l _Toc329337576 Use of #undef. PAGEREF _Toc329337576 h - 75 - HYPERLINK l _Toc329337577 Functions and macr

53、os. PAGEREF _Toc329337577 h - 75 - HYPERLINK l _Toc329337578 Arguments to function-like macros. PAGEREF _Toc329337578 h - 76 - HYPERLINK l _Toc329337579 Parentheses for macro occurences. PAGEREF _Toc329337579 h - 76 - HYPERLINK l _Toc329337580 Parentheses for macro. PAGEREF _Toc329337580 h - 76 - HY

54、PERLINK l _Toc329337581 Identifiers in pre-processor directives. PAGEREF _Toc329337581 h - 76 - HYPERLINK l _Toc329337582 Directive pragma. PAGEREF _Toc329337582 h - 76 - HYPERLINK l _Toc329337583 Forbidden #include. PAGEREF _Toc329337583 h - 77 - HYPERLINK l _Toc329337584 Use of void type and funct

55、ions. PAGEREF _Toc329337584 h - 77 - HYPERLINK l _Toc329337585 #include syntax. PAGEREF _Toc329337585 h - 77 -前言本文擋詳細(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ī)則。Rulechecker規(guī)則集Rul

56、echecker規(guī)則集分為兩大部分:基本規(guī)則集和Scott Meyers規(guī)則集。我們先來逐條介紹基本規(guī)則集中的規(guī)則。基本規(guī)則集ansi 函數(shù)的聲明和定義要遵守ANSI規(guī)定的格式規(guī)則描述: 函數(shù)聲明和定義的格式,要符合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

57、*b); f(void);f(a, b)int a;char *b .f(int, char*);f();asscal 在函數(shù)調(diào)用語句中不要使用賦值操作符規(guī)則描述: 函數(shù)調(diào)用語句中,在函數(shù)的參數(shù)列表中不要使用賦值操作符。賦值操作符包括=, +=, -=, *=, /=, %=, =, =, 0; i-, j-) .if (x -= dx) . for (i=j=n; -i 0; j-) .assexp 賦值表達(dá)式中的規(guī)定規(guī)則描述:在一個(gè)賦值表達(dá)式中: 一個(gè)左值,在表達(dá)式中應(yīng)該僅被賦值一次。對(duì)于多重賦值表達(dá)式,一個(gè)左值在表達(dá)式中僅應(yīng)出現(xiàn)一次,不能重復(fù)出現(xiàn)。目的:避免產(chǎn)生不明確的賦值順序。舉例:正

58、確寫法錯(cuò)誤寫法b=c+a;a=b;a=b=c+a;blockdecl 在語句塊的頭部定義變量規(guī)則描述:變量的定義要出現(xiàn)在使用該變量的語句塊的開頭。目的:提高代碼的可讀性。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 (i=1;

59、 function_call(i); i+) brkcont 程序中禁用break、continue規(guī)則描述:在控制語句 (for, do, while) 塊中,禁止使用Break和continue。不過,在switch語句塊中,可以使用break。目的:和goto語句一樣, 使用Break和continue會(huì)打亂代碼結(jié)構(gòu)化的流程。在循環(huán)語句塊中禁用goto、Break和continue,會(huì)增加代碼的可讀性。classuse 對(duì)未知類成員的使用規(guī)則描述:在代碼中不要使用如下形式的表達(dá)式 :u.v.a, u.v.f(),u.g().a, u.g().f(),也不要有使用“-”操作符的類似形式的表

60、達(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()已經(jīng)不屬于基類Window對(duì)myWindow的接口。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論