C和C++编码规范_第1页
C和C++编码规范_第2页
C和C++编码规范_第3页
C和C++编码规范_第4页
C和C++编码规范_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C/C+编码规则文件状态:草稿公开类型:内部公开文档编号:当前版本:V1.0作 者:制作部门:终端软件研发部完成日期:2012年07月08日编写与修改记录版本号完成日期更改位置更改内容编制/修改审批V1.02012.07.08全文初稿目 录章节目录 TOC o 1-3 h z u HYPERLINK l _Toc329337391 第1章前言 PAGEREF _Toc329337391 h - 7 - HYPERLINK l _Toc329337392 第2章Rulechecker规则集 PAGEREF _Toc329337392 h - 7 - HYPERLINK l _Toc3293373

2、93 2.1基本规则集 PAGEREF _Toc329337393 h - 7 - HYPERLINK l _Toc329337394 ansi 函数的声明和定义要遵守ANSI规定的格式 PAGEREF _Toc329337394 h - 7 - HYPERLINK l _Toc329337395 asscal 在函数调用语句中不要使用赋值操作符 PAGEREF _Toc329337395 h - 8 - HYPERLINK l _Toc329337396 asscon 不要在控制语句的条件表达式中使用赋值操作符 PAGEREF _Toc329337396 h - 9 - HYPERLINK

3、l _Toc329337397 assexp 赋值表达式中的规定 PAGEREF _Toc329337397 h - 9 - HYPERLINK l _Toc329337398 blockdecl 在语句块的头部定义变量 PAGEREF _Toc329337398 h - 10 - HYPERLINK l _Toc329337399 boolean 使用正确格式的布尔表达式 PAGEREF _Toc329337399 h - 10 - HYPERLINK l _Toc329337400 brkcont 程序中禁用break、continue PAGEREF _Toc329337400 h -

4、11 - HYPERLINK l _Toc329337401 classuse 对未知类成员的使用 PAGEREF _Toc329337401 h - 11 - HYPERLINK l _Toc329337402 cmclass一个源文件只对应一个类 PAGEREF _Toc329337402 h - 12 - HYPERLINK l _Toc329337403 cmdef 源文件中不要有类的声明 PAGEREF _Toc329337403 h - 12 - HYPERLINK l _Toc329337404 condop 关于? . : . 操作符 PAGEREF _Toc329337404

5、 h - 12 - HYPERLINK l _Toc329337405 const 使用常量 PAGEREF _Toc329337405 h - 13 - HYPERLINK l _Toc329337406 constrcpy 关于拷贝构造函数 PAGEREF _Toc329337406 h - 14 - HYPERLINK l _Toc329337407 constrdef 关于默认构造函数 PAGEREF _Toc329337407 h - 14 - HYPERLINK l _Toc329337408 ctrlblock 清晰划分控制语句的语句块 PAGEREF _Toc329337408

6、 h - 15 - HYPERLINK l _Toc329337409 destr 关于析构函数 PAGEREF _Toc329337409 h - 15 - HYPERLINK l _Toc329337410 dmaccess 类数据成员的访问控制 PAGEREF _Toc329337410 h - 16 - HYPERLINK l _Toc329337411 exprcplx 表达式的复杂性 PAGEREF _Toc329337411 h - 16 - HYPERLINK l _Toc329337412 exprparenth 在表达式中使用括号 PAGEREF _Toc329337412

7、 h - 17 - HYPERLINK l _Toc329337413 fntype 必须为函数返回值指定类型 PAGEREF _Toc329337413 h - 18 - HYPERLINK l _Toc329337414 frndclass 关于友员的声明位置 PAGEREF _Toc329337414 h - 18 - HYPERLINK l _Toc329337415 funcres 设置禁止使用的函数 PAGEREF _Toc329337415 h - 18 - HYPERLINK l _Toc329337416 goto 禁用Goto语句 PAGEREF _Toc329337416

8、 h - 19 - HYPERLINK l _Toc329337417 Headercom 对文件注释的要求 PAGEREF _Toc329337417 h - 20 - HYPERLINK l _Toc329337418 headercom 函数、类的注释 PAGEREF _Toc329337418 h - 21 - HYPERLINK l _Toc329337419 hmclass 一个头文件中只声明一个类 PAGEREF _Toc329337419 h - 21 - HYPERLINK l _Toc329337420 hmdef 头文件中只包含声明,不应包含实现 PAGEREF _Toc

9、329337420 h - 21 - HYPERLINK l _Toc329337421 hmstruct 避免重复包含头文件 PAGEREF _Toc329337421 h - 22 - HYPERLINK l _Toc329337422 identfmt 对命名的要求 PAGEREF _Toc329337422 h - 23 - HYPERLINK l _Toc329337423 identl 对标识符长度的要求 PAGEREF _Toc329337423 h - 23 - HYPERLINK l _Toc329337424 identres 设置禁止使用的标识符 PAGEREF _Toc

10、329337424 h - 24 - HYPERLINK l _Toc329337425 imptype 明确指定类型 PAGEREF _Toc329337425 h - 24 - HYPERLINK l _Toc329337426 incltype 设置可包含的文件 PAGEREF _Toc329337426 h - 24 - HYPERLINK l _Toc329337427 inldef 关于内联函数的声明和定义 PAGEREF _Toc329337427 h - 25 - HYPERLINK l _Toc329337428 macrocharset 在宏中禁用某些字符 PAGEREF

11、_Toc329337428 h - 25 - HYPERLINK l _Toc329337429 macroparenth 括号在宏中的使用 PAGEREF _Toc329337429 h - 26 - HYPERLINK l _Toc329337430 mconst 限制宏常量的使用 PAGEREF _Toc329337430 h - 26 - HYPERLINK l _Toc329337431 mfunc 用内联函数代替宏函数 PAGEREF _Toc329337431 h - 27 - HYPERLINK l _Toc329337432 mname 文件命名 PAGEREF _Toc32

12、9337432 h - 28 - HYPERLINK l _Toc329337433 multiass 一条程序语句中只应包含一个赋值操作符 PAGEREF _Toc329337433 h - 29 - HYPERLINK l _Toc329337434 nopreproc 限制使用编译指令 PAGEREF _Toc329337434 h - 29 - HYPERLINK l _Toc329337435 nostruct 不要使用结构体 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 不要使用联合体 PAGEREF _Toc329337438 h - 30 - HYPERLINK l _Toc329337439 operass 为类重载“=”操作符 PAGEREF _Toc329337439 h - 31 - HYPERLINK l _Toc329337440 parammode 明确标识出函数参数的类型 PAG

14、EREF _Toc329337440 h - 31 - HYPERLINK l _Toc329337441 parse 分析错误 PAGEREF _Toc329337441 h - 32 - HYPERLINK l _Toc329337442 ptraccess 指针指向的数据成员的访问方式 PAGEREF _Toc329337442 h - 32 - HYPERLINK l _Toc329337443 ptrinit 对指针的初始化 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 一次只声明、定义一个变量 PAGEREF _Toc329337446 h - 35 - HYPERLINK l _Toc329337447 sglreturn 一个函数应该只有一条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 对switch语句中每个分支结尾的要求 PAGEREF _Toc329337451 h - 37 - HYPER

17、LINK l _Toc329337452 typeinher 明确指明派生类与基类的关系 PAGEREF _Toc329337452 h - 38 - HYPERLINK l _Toc329337453 typeres 设置禁用的类型 PAGEREF _Toc329337453 h - 38 - HYPERLINK l _Toc329337454 vararg 禁止函数使用可变数量的参数 PAGEREF _Toc329337454 h - 39 - HYPERLINK l _Toc329337455 varstruct 关于定义struct、union变量 PAGEREF _Toc329337

18、455 h - 39 - HYPERLINK l _Toc329337456 2.2Scott Meyers 规则集 PAGEREF _Toc329337456 h - 40 - HYPERLINK l _Toc329337457 assignthis 在=操作符定义中检查是否自己赋值给自己 PAGEREF _Toc329337457 h - 40 - HYPERLINK l _Toc329337458 cast Prefer 尽量使用C+风格的类型转换 PAGEREF _Toc329337458 h - 41 - HYPERLINK l _Toc329337459 catchref 通过引用

19、捕获异常 PAGEREF _Toc329337459 h - 41 - HYPERLINK l _Toc329337460 constrinit 尽量在构造函数的初始化列表中对数据成员初始化 PAGEREF _Toc329337460 h - 42 - HYPERLINK l _Toc329337461 convnewdel 重载new、delete操作符时应遵守的约定 PAGEREF _Toc329337461 h - 42 - HYPERLINK l _Toc329337462 dataptr 指针数据成员 PAGEREF _Toc329337462 h - 43 - HYPERLINK

20、l _Toc329337463 delifnew 如果你重载了操作符new,也应该重载操作符 delete PAGEREF _Toc329337463 h - 43 - HYPERLINK l _Toc329337464 excepspec 审慎使用异常处理 PAGEREF _Toc329337464 h - 43 - HYPERLINK l _Toc329337465 inlinevirt 内联虚拟函数 PAGEREF _Toc329337465 h - 43 - HYPERLINK l _Toc329337466 multinher 尽量不要使用多继承 PAGEREF _Toc329337

21、466 h - 44 - HYPERLINK l _Toc329337467 nonleafabs 将非末端类设计为抽象类 PAGEREF _Toc329337467 h - 44 - HYPERLINK l _Toc329337468 normalnew 不要遮掩了new的正规形式 PAGEREF _Toc329337468 h - 45 - HYPERLINK l _Toc329337469 overload 不要重载“&”、“|”、“,” PAGEREF _Toc329337469 h - 45 - HYPERLINK l _Toc329337470 prepost “+”、“-”操作符

22、前缀形式与后缀形式的区别 PAGEREF _Toc329337470 h - 45 - HYPERLINK l _Toc329337471 refclass 类的引用 PAGEREF _Toc329337471 h - 46 - HYPERLINK l _Toc329337472 returnthis 在重载“=”时,使其返回*this PAGEREF _Toc329337472 h - 46 - HYPERLINK l _Toc329337473 tryblock Try语句块 PAGEREF _Toc329337473 h - 47 - HYPERLINK l _Toc329337474

23、trydestr 析构函数中的异常处理 PAGEREF _Toc329337474 h - 47 - HYPERLINK l _Toc329337475 virtdestr 虚拟析构函数(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+风格的类型转换 )

24、 PAGEREF _Toc329337477 h - 48 - HYPERLINK l _Toc329337478 dataptr(数据的指针类型) 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 (循环的计数器(在for循环中)必须在循环的初始化语句段中初始化) PAGEREF _Toc329337481 h - 51 - HYPERLINK l _Toc329337482 funcptr(不使用函数指针) PAGEREF _Toc329337482 h - 51 - HYPERLINK l _Toc329337483 globinit (全局变量必须在定义的时候初

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 (不返回指针成员数据) PAGEREF _Toc329337487 h - 53 - HYPERLINK l _Toc329337488 refclass (类的引用) PAGEREF _Toc329337488 h - 53 - HYPERLINK l _Toc329337489 rtnlocptr (不能返回一个指向一个非静态局部变量) PAGEREF _Toc329337489 h - 53 - HYPERLINK l _Toc329337490 vararg va

28、rarg(Variable Number of Arguments ) PAGEREF _Toc329337490 h - 53 - HYPERLINK l _Toc329337491 varinit(参数在使用前要初始化 ) 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规则集 PAGEREF _Toc329337494 h - 55 - HYPERLINK l _Toc329337495 Operator defined.操作符定义. PAGEREF _Toc329337495 h - 55 - HYPERLINK l _Toc329337496 Pointer arithmetic算术指针 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函数指针 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.变量存储 PAGEREF _Toc329337504

32、 h - 57 - HYPERLINK l _Toc329337505 Identifiers must not exceed 31 characters.标识符不要超过31个字符 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.位域两字节长度 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.标准库函数 PAGEREF _Toc329337511 h - 59 - HYPERLINK l _Toc329337512 Dynamic heap memory.动态分配内存 PAGEREF _Toc329337512 h - 59 - HYPERLINK l _Toc329337513 Error indicator errno. 错误指示errno PAGEREF _Toc329337513 h - 59 - HYPERLINK l _Toc329337514 Name of identifiers.标识符命名 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. 八进制常量 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.结构初始化 PAGEREF _Toc329337536 h - 66 - HYPERLINK l _Toc329337537 Enum Initialisation数组初始化 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 -前言本文挡详细描述了在LogiscopeRulechecker中包含的所有编码规范。对每一条编码规范,分别给出了它的名称、规范的内容描述、参数(只针对可设置的规范)、遵守规范的好处以及示例。Rulechecker共包含81条编码规范,其中有30条左右可以对其内容进行定制,对于可定制编码规范的具体定制方法,可参见RuleChecker可定制规则。Rulechecker规则集Rul

56、echecker规则集分为两大部分:基本规则集和Scott Meyers规则集。我们先来逐条介绍基本规则集中的规则。基本规则集ansi 函数的声明和定义要遵守ANSI规定的格式规则描述: 函数声明和定义的格式,要符合ANSI规定的格式要求。它要求满足以下两项中的一项: name:为函数参数列表中的参数指定数据类型和参数名称。 void: 禁止函数参数列表为空。在RuleChecker的默认情况下,以上两项同时生效。参数: 可供选择的字符串,“name”和“void”。目的: 提高代码的可读性,改善可移植性。举例:正确写法错误写法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 在函数调用语句中不要使用赋值操作符规则描述: 函数调用语句中,在函数的参数列表中不要使用赋值操作符。赋值操作符包括=, +=, -=, *=, /=, %=, =, =, 0; i-, j-) .if (x -= dx) . for (i=j=n; -i 0; j-) .assexp 赋值表达式中的规定规则描述:在一个赋值表达式中: 一个左值,在表达式中应该仅被赋值一次。对于多重赋值表达式,一个左值在表达式中仅应出现一次,不能重复出现。目的:避免产生不明确的赋值顺序。举例:正

58、确写法错误写法b=c+a;a=b;a=b=c+a;blockdecl 在语句块的头部定义变量规则描述:变量的定义要出现在使用该变量的语句块的开头。目的:提高代码的可读性。boolean 使用正确格式的布尔表达式规则描述:对于if, while, for等控制语句的布尔表达式,要使用正确的格式。目的: 使代码更容易理解。举例:正确写法错误写法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规则描述:在控制语句 (for, do, while) 块中,禁止使用Break和continue。不过,在switch语句块中,可以使用break。目的:和goto语句一样, 使用Break和continue会打乱代码结构化的流程。在循环语句块中禁用goto、Break和continue,会增加代码的可读性。classuse 对未知类成员的使用规则描述:在代码中不要使用如下形式的表达式 :u.v.a, u.v.f(),u.g().a, u.g().f(),也不要有使用“-”操作符的类似形式的表

60、达式。目的:防止类对象通过多级的“.”、“-”操作符,调用未知的成员函数、数据成员。类与类之间的接口应该清晰。举例:/不要象下面这样写代码:myWindow.itsButton.push();其中,对象myWindow的基类为类Window,itsButto是Window的一个公共数据成员,它也是一个类对象,itsButto有一个叫做push()的公共成员函数。我们应该清楚的是,类Window才是myWindow访问其的接口,myWindow 只应访问到itsButton,而不应该访问到itsButton.push()这一级,因为push()已经不属于基类Window对myWindow的接口。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论