读书笔记之C++/C文件结构和程序版式及应用程序命名规则

第10章 C++/C文件结构和程序版式


  • 头文件的用途和结构
(1)通过头文件来调用库功能。在很多场合,源代码不便向用户公布,只要向用户提供头文件和二进制的库即可。用户只需按照头文件中的接口声明来调用库函数,而不必关心接口是怎么实现的,连接器会从库中提取相应的代码,并和用户的程序连接生成可执行文件或动态链接库文件;
(2)头文件能加强类型安全检查,如果某个接口被实现或被使用的方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
(3)头文件可以提高程序的可读性(清晰性)。




  •  版权和版本信息
(1)版权信息
(2)文件名称、简要描述、创建日期和作者
(3)当前版本信息和说明
(4)历史版本信息和修订说明




  •  源文件结构
C和C++源文件主要保存函数的实现和类的实现,其结构一般如下:
(1)源文件注释(包括文件说明、功能描述、版权声明等)(必须有)
(2)预处理指令(如果需要)
(3)常量和宏定义(如果需要)
(4)外部变量声明和全局变量定义及初始化(如果需要)
(5)成员函数和全局函数的定义(如果需要)
(6)文件修改记录




  • 10.3.1 适当的空行
空行起着分割段落的作用,空行得提将使程序的布局更加清晰。空行不会浪费内存。但是也不能过度使用空行。段落之间一般留一个或两个空行就行,多了给人“七零八落”的感觉。


哪些地方该使用空行呢?一般约定如下:
(1)ADT/UDT定义之间要留空行。ADT内部的各个访问段之间要留空行;每一段内按照相关性分组的,建议在各组之间留空行,没有明显相关性的不需要分组;
(2)函数定义之间要留空行。在函数体内,完整的控制结构及单独的语句块之间要分别流出空行,它们与其他段落之间也要留出空行以示区分;逻辑上密切相关的语句序列之间不要留空行;最后一条return语句前要留空行,除非该函数只有这一条语句;控制结构、语句块、条件编译块等遵循同样的规则;
(3)注释行或注释块与被它们注释的程序元素之间不要留空行。




建议:
1.不要书写复杂的语句行,一行代码只做一件事情。
2.if、elseif、for、do、while等语句各自占一行其他语句不得紧跟其后;不论该语句块中有多少行语句都要用“{}”括起来,这样可以防止书写失误。
3.局部变量在定义的同时应当初始化,而且要在同一行内初始化,这是因为,对于局部变量,系统不会自动初始化它们,在运行时它们的内存单元将保留上次使用以来留下的脏值。在这,如果变量的引用处距其定义较远,变量的初始化就容易被遗忘。
if、elseif、for、do、while、switch等关键字之后应留一个空格再跟左括号。
4.函数名之后不留空格,无论是在原型、定义还是在调用中。
5.左括号向后紧跟,右括号以及逗号分号向前紧跟,紧跟出不留空格,逗号之后要留空格。如果分号不是一行的结束符,则后面也要留空格。
6.预编译指令中#和保留字之间不要留空格;文件包含伪指令中文件名与两端的“<”、“>”或“"”、“"”之间不留空格
7.二院运算符的前后应当加空格
8.一元运算符与所作用的操作数之间不加空格
9.“.”、“->”、“.*”、“->*”、“::”这类运算符前后不加空格;“?”、“:”前后要加空格。




  • 长行拆分
代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。有时候会碰见比较长的语句,则可以在一些“断点”处折行。


建议:长表达式要在低优先级运算符处拆分为多行,运算符放在新行之首(表示突出)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。


  • 对齐与缩进
程序的分解符“{”和“}”应独占一行并且位于同一列,同时与引用它们的语句左对齐。{}之内的代码块在“{”右边数格处左对齐,建议4个空格。在另外一些情况下,可以将花括号与其内部的语句块左对齐,并且都向右缩进4格。


建议将修饰符*和&紧靠变量名,;例如:int *x, y;//此处y不会被误解为指针




  • 注释风格
注释通常用于:
(1)版本、版权声明
(2)函数接口说明
(3)重要的代码行或段落提示

使用注释的建议如下:
(1)注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主。
(2)如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。
(3)边写代码边加注释,修改代码的同时修改相应的注释,以保证注释与代码的一致性;
(4)不再有用的注释要删除掉。注释应当准确易懂,放置出现二义性。错误的注释无益有害。
(5)注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。


函数头注释主要用来说明函数的功能及其参数和返回值的信息。对于那些简单的函数,可以不加注释或只用一行注释来说明其作用。






  • ADT/UDT版式
(1)将private限定的成员写在前面,而将public限定的成员写在后面。采用这种版式的程序员一般是主张“以数据为中心”设计ADT/UDT,终点关注其内部结构。
(2)将public限定的成员写在前面,而将Private限定的成员写在后面。采用这种版式的程序员一般是主张“以行为为中心”,终点关注其提供的接口(或服务)。
建议采用“以行为为中心”的方式俩编写类,即首先考虑类应该提供什么样的接口。




第11章 C++/C应用程序命名规则


  • 共性规则
建议1:标识符的名字应当直观且可以拼读,可望文生义,不必进行“解码”。


建议2:标识符的长度应当符合“min-length & max-information”原则
有时候标识符采用的英文单词太长,几个单词组合后会更长,此时应该采用一些通用而合理的缩写或者应用领域专业术语的缩写。通常这些缩写会在编程规范中给出,可作为参考。


    注意:

程序中不要出现仅靠大小写来区分的相似标识符。

不要使程序中出现局部变量和全局变量同名的现象,尽管由于两者的作用域不同而不会发生语法错误,但会使人误解。

变量的名字应当使用“名词”或者“形容词+名词”的格式来命名。
全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。


用正确的反义词组命名具有相反意义的变量或相反动作的函数等。


  • 简单的Windows应用程序命名
        1.类型名和函数名均以大写字母开头的单词组合而成。
        2.变量名和参数名采用第一个单词首字母小写而后面的单词首字母大写的单词组合。
        3.符号常量和宏名用全大写的单词组合而成,并在单词之间用单下划线分隔,注意首尾最好不要使用下划线。
        4.给静态变量加前缀s_表示static。
        5.如果不得已需要全局变量,这时全局变量加前缀g_,表示global。
        6.类的数据成员加前缀m_(表示member),这样可以避免数据成员与成员函数的参数同名。
        7.为了防止某一软件库中的一些标识符和其他软件库中的冲突,可以统一为各种标识符加上能反映软件性质的前缀。

猜你喜欢

转载自blog.csdn.net/qq_37385181/article/details/80623887