2022年C语言编程规范-. .pdf
《2022年C语言编程规范-. .pdf》由会员分享,可在线阅读,更多相关《2022年C语言编程规范-. .pdf(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C编码规范109 条规则 49 条建议名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 22 页 -C 语言编码规范目录1.文件结构(4 条规则 6 条建议).11.1 版权和版本的声明.11.2 头文件的结构.21.3 定义文件的结构.31.4 头文件和定义文件使用(4 条规则 6 条建议).32.程序版式(34 条规则 2 条建议).42.1 空行(4 条规则).42.2 代码行(5 条规则 1 条建议).42.3 代码行内的空格(6 条规则 1 条建议).52.4 对齐(4 条规则).62.5 长行拆分(2 条规则).72.6 修饰符的位置(1 条规则).82.7 注释(12
2、 条规则).83.标识符命名(15 条规则 1 条建议).84.常量(7 条规则).104.1 const 与#define 的比较(2 条规则).104.2 常量定义(5 条规则).105.变量(11条规则).116.表达式和基本语句(17条规则 3 条建议).116.1 运算符的优先级(1 条规则).116.2 复合表达式(4 条规则).126.3 if 语句布尔表达式(7 条规则).126.4 循环语句(1 条规则 3 条建议).156.5 switch 语句(2 条规则).166.6 goto 语句(1 条规则).167.函数设计(16 条规则 10 条建议).167.1 注释规则(1
3、条规则).167.2 函数的使用(1 条规则).167.3 参数的规则(4 条规则 2 条建议).177.4 返回值的规则(6 条规则).177.5 函数内部实现的规则(2 条规则).177.6 其它建议(6 条建议).187.7 使用断言(2 条规则 2 条建议).188.内存管理(5 条规则).188.1 内存使用注意的问题(5 条规则).189.其他规范及建议(27条建议).199.1 提高程序的效率(6 条建议).199.2 编译问题(2 条建议).199.3 兼容性问题(8 条建议).199.4 性能问题(4条建议).199.5 其他一些有益的建议(7 条建议).20名师资料总结-精
4、品资料欢迎下载-名师精心整理-第 2 页,共 22 页 -C 语言编码规范第 1 页 共 20 页1.文件结构(4 条规则 6 条建议)C程序文件通常分为两类文件:一类文件用于保存程序的声明(declaration),称为头文件。头文件以“.h”为后缀。另一类文件用于保存程序的实现(implementation),称为定义(definition)文件。定义文件以“.c”为后缀。对于简单的 C语言程序,一般在把头文件和程序定义文件放在一起,只有一个.c 定义文件即可。而对于复杂的程序,则多采用头文件包含的形式并通过多个定义文件实现。1.1 版权和版本的声明版权和版本的声明一般应该位于头文件和定义
5、文件的开头(参见示例1-1),主要内容包括:(1)版权信息;(2)文件名称、文件标识、摘要;(3)当前版本号、作者/修改者、修改日期、修改描述等;(4)版本历史信息、原作者、完成日期等。示例 1-1 版权和版本的声明版本标识:采用.来命名自己产品的编号。一般这样约定,如果/*Copyright(c)2004,北大青鸟培训中心*All rights reserved.*文件名称:filename.h*文件标识:根据软件工程设置*摘要:简要描述本文件的作用和内容等*/下面其它的声明代码/下面是原作者、版本、完成、日期和当前版本的信息/*当前版本:1.0.1*作者:修改者名字,修改日期:2005年4
6、月 5日*修改的地方描述:*/*取代版本:1.0.0*原作者:原作者名字,完成日期:2004年12月31日*/名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 22 页 -C 语言编码规范第 2 页 共 20 页次版本号是偶数(如0、2、4 等),代表正式版本,如果次版本号是奇数(如 1、3、5 等),代表开发过程中的测试版本。修订号则相当于Build号,用来标识一些小的改动。1.2 头文件的结构头文件由三部分内容组成:(1)文件开头处的版权和版本声明(参见示例1-1);(2)预处理块;(3)声明函数原型和声明数据结构或变量等。假设头文件名称为filename.h,头文件的结构参见
7、示例1-2。示例 1-2 C 头文件结构/*Copyright(c)2004,北大青鸟培训中心*All rights reserved.*文件名称:filename.h*文件标识:根据软件工程设置*摘要:简要描述本文件的作用和内容等*/#include#include#include /引用头文件struct studentstruct int no;char name20;char sex;float score;void GetValue()void SetValue(int no)/后面同示例 1-1。名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 22 页 -C 语言编码
8、规范第 3 页 共 20 页1.3 定义文件的结构定义文件有三部分内容:(1)定义文件开头处的版权和版本声明(参见示例1-1);(2)对一些头文件的引用;(3)程序的实现体(包括数据和代码)。假设定义文件的名称为filename.c,定义文件的结构参见示例1-3 示例 1-3 C 定义文件的结构1.4 头文件和定义文件使用(4 条规则 6 条建议)【规则 1-2-1】在复杂的工程文件中,为了防止头文件被重复引用,应使用ifndef/define/endif 结构产生预处理块。【规则 1-2-2】用#include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。【规则 1-2-3】用
9、#include“filename.h”格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。【规则 1-2-4】只引用必需的头文件,不要为了防止忘记包含头文件而在每个文件开始添加很多的头文件。【建议 1-2-1】不要在头文件中定义常量或变量,注意头文件只是用来声明。【建议 1-2-2】不提倡使用全局变量,尽量不要在头文件中出现像“extern int width;”这类声明。【建议 1-2-3】将非系统的函数库放在一个单独的目录下引用。【建议 1-2-4】头文件应按功能组织在一起,即对单独子系统的声明应放在单独的头文件中。此外,/*版权和版本声明见示例1-1,此处省略。*/#inl
10、cude“filename.h”#ifndef GRAPHICS_H /防止 graphics.h 被重复引用#define GRAPHICS_H/*函数的实现体*/void GetValue()/*函数的实现体*/void SetValue(int no)void main()名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 22 页 -C 语言编码规范第 4 页 共 20 页当代码从一个平台移植到另一个平台时有可能发生更改的声明应位于单独的头文件中,并进行相应的注释。【建议 1-2-5】避免使用与函数库中专用头文件名相同的头文件名。语句#include math.h 如果在当前
11、目录中找不到所期望文件的话,会包括标准库math 头文件。【建议 1-2-6】包含头文件时一般不使用绝对路径名。2.程序版式(35 条规则 2 条建议)2.1 空行(4 条规则)空行起着分隔程序段落的作用,空行得体将使程序的布局更加清晰。空行不会浪费内存,所以不要舍不得用空行。【规则 2-1-1】在函数内部局部变量定义结束之后处理语句之前要加空行。【规则 2-1-2】在每个函数定义结束之后都要加空行。参见示例2-1(a)。【规则 2-1-3】函数返回语句和其他语句之间使用空行分开。【规则 2-1-4】在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。参见示例 2-1(b)
12、。示例 2-1(a)函数之间的空行示例 2-1(b)函数内部的空行2.2 代码行(5 条规则 1 条建议)【规则 2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方便写注释。【规则 2-2-2】if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 表明是一个语句块。【规则 2-2-3】一对花括号要单独各占一行。但是在do-while、struct 和union及其后有;的除外,要同在一行。/空行void Function1()/空行void Function2()/空行void Function3()/空行w
13、hile(condition)statement1;/空行if(condition)statement2;else statement3;/空行statement4;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 22 页 -C 语言编码规范第 5 页 共 20 页例如:【规则 2-2-4】switch 语句中的每个 case语句各占一行,当某个case语句不需要 break语句最好加注释声明。【规则 2-2-5】并列的语句行应该按照字母顺序排序,如变量定义和switch 中的 case语句等。【建议 2-2-1】尽可能在定义变量的同时初始化该变量(就近原则),如果变量的引用处和
14、其定义处相隔较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如:int width=20;/*定义并初绐化width*/int height=20;/*定义并初绐化height*/int depth=20;/*定义并初绐化depth*/风格良好的代码行风格不良的代码行int width;/*宽度*/int height;/*高度*/int depth;/*深度*/int width,height,depth;/*宽度高度深度*/x=a+b;y=c+d;z=e+f;x=a+b;y=c+d;z=e+f;if(width height)dosom
15、ething();if(width 0);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 22 页 -C 语言编码规范第 6 页 共 20 页关键字。象 if、for、while等关键字和紧跟的左括号(之后应留一个空格,右括号前也对应要留一个空格,以突出关键字。例如:if(a=b)【规则 2-3-2】函数名之后不要留空格,紧跟左括号(,以与关键字区别。例如:void calc(void);【规则 2-3-3】“,”之后要留空格,如Function(x,y,z)。如果;不是一行的结束符号,其后要留空格,如 for(initialization;condition;update)。【
16、规则 2-3-4】不要在单目运算符(如“!”、“”、“+”、“-”、“&”)和其操作对象间加空格。例如:!foo,+i,(long)getValue【规则 2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”、“=”、“=”、“+”、“*”、“%”、“&”、“|”、“”这类操作符前后不加空格。例如:big.bar,pFile-bar,bigbar【建议 2-3-1】对于表达式较长的for 语句和 if 语句,为了紧凑起见可以适当地去掉一些空格.例如:for(i=0;i10;i+)和if(a=b)&(c=2000)if(a=b)&(c=2000)if(a=b
17、&c=d)for(i=0;i10;i+)for(i=0;i10;i+)for(i=0;i 10;i+)x=a b?a:b;x=aFunction();array 5 =0;a.Function();b-Function();2.4 对齐(4 条规则)【规则 2-4-1】程序的分界符和 应独占一行并且位于同一列,同时与引用它们的语句左对齐。【规则 2-4-2】水平缩进每次使用四个空格即可(定义一个 tab 键为四个空格。有的要求缩进两个空格)。【规则 2-4-3】同属于一个语句块的代码对齐。【规则 2-4-4】之内的代码块在右边一个 tab键处左对齐。风格良好的对齐风格不良的对齐void Fun
18、ction(int x)program code void Function(int x)program code if(condition)program code if(condition)program code else 名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 22 页 -C 语言编码规范第 7 页 共 20 页风格良好的对齐风格不良的对齐else program code program code for(initialization;condition;update)program code for(initialization;condition;updat
19、e)program code while(condition)program code while(condition)program code 如果出现嵌套的,则使用缩进对齐,如:2.5 长行拆分(2 条规则)【规则 2-5-1】代码行最大长度宜控制在70至80个字符以内。代码行不宜过长,否则不便于阅读,也不便于打印。【规则 2-5-2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。if(very_longer_variable1=very_longer_variable12)&(very_longer_va
20、riable3=very_longer_variable14)&(very_longer_variable5 1).#endif 名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 22 页 -C 语言编码规范第 9 页 共 20 页【规则 3-1-2】标识符的长度应当符合“min-length&max-information”(最短并包含信息最多)原则。单字符的名字也是有用的,常见的如i、j、k、m、n、x、y、z 等,它们通常可用作函数内的局部变量。【规则 3-1-3】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。例如 Windows应用程序的标识符通常采用“大小写”
21、混排的方式,如printStudent;而Unix 应用程序的标识符通常采用“小写加下划线”的方式,如print_student。别把这两类风格混在一起用。【规则 3-1-4】尽量选择通用词汇并保持整个软件风格一致。例如:使用 get、read、fetch、retrieve都能表达“取出”的意思,一旦软件采用哪一个则应贯穿始终。【规则 3-1-5】程序中不要出现仅靠大小写区分的相似的标识符。例如:int x,X;/*变量 x 与X 容易混淆*/void foo(int y);/*函数 foo 与FOO 容易混淆*/void FOO(float y);【规则 3-1-6】程序中不要出现标识符完全
22、相同的局部变量和全局变量,尽管可能两者的作用域不同而不会发生语法错误,但会使人误解。【规则 3-1-7】变量的名字应当使用“名词”或者“形容词名词”。例如:float value;float newValue;【规则 3-1-8】用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。例如:int MinValue;int MaxValue;int MinValue(void);int MaxValue(void);【规则 3-1-9】变量和参数首字母小写,其后每个英文单词的第一个字母大写,其它小写。例如:int recWidth;【规则 3-1-10】标识布尔型的变量或函数名称一般使用is
23、作为前缀。例如:void isFull();【规则 3-1-11】常量全用大写字母,用下划线分割单词。const int MAX_LENGTH=100;【规则 3-1-12】静态变量加前缀s_(表示 static)。static int s_initValue;/*静态变量*/【规则 3-1-13】如果需要定义全局变量,则变量加前缀g_(表示 global)。例如:int g_howStudent;/*全局变量*/【规则 3-1-14】函数名用大写字母开头的单词组合而成。由多个单词组成的标识符每个单词首字母大写。其它小写。例如:InputStudInfo();/全局函数【规则 3-1-15】一
24、般错误包裹函数名全部大写。例如:名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 22 页 -C 语言编码规范第 10 页 共 20 页可以定义成下面的包裹函数以后调用的话,则可以使用下面的简洁方式:FILE*pFile=FOPEN(readme.txt,rw+);【建议 3-1-1】尽量避免名字中出现数字编号,如value1、value2 等,除非逻辑上的确需要编号。4.常量(7 条规则)常量是一种标识符,它的值在运行期间恒定不变。C 语言用#define 来定义常量。除了#define 之外还可以用 const 来定义常量。4.1 const 与#define 的比较(2 条
25、规则)C 语言可以用 const 来定义常量,也可以用#define 来定义常量。但是前者比后者有更多的优点:(1)const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换过程中可能会产生意料不到的错误。(2)有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。【规则 4-1-1】尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串。例如:#define MAX 100 /C 语言的宏常量const float PI=3.14159;/C 语言的 const 常量【规则 4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年C语言编程规范-. 2022 语言 编程 规范
限制150内