读高质量C++/C编程指南1-3章
Posted TangguTae
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读高质量C++/C编程指南1-3章相关的知识,希望对你有一定的参考价值。
目录
第一章 文件结构
版权和版本的声明
这个在以后工作,对每个文件进行版权版本的声明,是规范开发项目的一个重要的组成部分。
主要包含以下信息:
(1)版权信息
(2)文件名称,标识符,摘要。
(3)当前版本号,作者/修改者,完成日期。
(4)版本历史信息。
头文件的结构
除了版权和版本声明以外,还包括预处理块、函数和类结构的声明等
预处理块在之前的C语言预处理_TangguTae的博客-CSDN博客有讲过一部分这方面的知识。
为了防止头文件的重复引用,应当用ifndef/define/endif等预处理指令产生预处理块。
延伸:
现在大多数用#program once来防止重复包含头文件,这两种方法都可以实现这种功能,但是这两者的区别是什么?
#pragma once 此方式由编译器保证同一个文件不会被包含多次。注意:这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。这个跟编译器有关,所以在这个编译系统上可行,可能在其他编译环境就不行,可移植性差。
#ifndef #define #endif这个是通过C语言中的宏定义实现的,通过宏定义避免文件多次编译。所以这种方式只要是支持C++/C语言的编译器都可以使用,可移植性强。
从性能上看:
#program once效率更高一点
从灵活性上看:
#ifndef #define #endif更灵活一点,因为#program once作用对象是整个文件,而#ifndef #define #endif可以针对部分语句。
还有可能犯一个细节的错误,#ifndef ***可能后面的语句可能会写错。
建议:
- 文件最好只存放声明而不存放定义
- 最好不要声明全局变量,避免在头文件中存在extern int value这类声明
头文件的包含
#include<>与#include" "的区别
#include<>:编译器从标准库路径开始搜索,用来引用标准库的头文件。
#include" ":编译器从用户的工作路径开始搜索,用来引用非标准库的头文件。
头文件的作用
- 通过头文件来调用库功能。
- 头文件能加强类型安全检查。(当声明与定义不一致的时候,编译器会指出错误)
目录结构
当项目比较庞大的时候,头文件和源文件会非常的多,此时需要对项目中的文件进行管理,通常将头文件和源文件分别放在不同的目录下面,便于维护。
第二章 程序的板式
非常重要!!!
虽然不会影响代码的正常运行,但会影响到代码的可读性。
主要注意以下几个方面
- 空行
- 空格
- 对齐
- 长行拆分
- 修饰符的位置
- 注释
- 类的版式
空行使用的得体会让程序的布局显得很清晰,如果把代码写的密密麻麻的应该没有人想读你的代码
// 空行
void Function1(⋯)
⋯
// 空行
void Function2(⋯)
⋯
// 空行
void Function3(⋯)
⋯
空格的使用和空行是一样的道理,让代码更清晰。现在的编译器例如VS可以控制代码的格式,会使得程序员更舒服,但是这种编程习惯还是的养成。
void Func1(int x, int y, int z); // 良好的风格
void Func1 (int x,int y,int z); // 不良的风格
if (year >= 2000) // 良好的风格
if(year>=2000) // 不良的风格
if ((a>=b) && (c<=d)) // 良好的风格
if(a>=b&&c<=d) // 不良的风格
for (i=0; i<10; i++) // 良好的风格
for(i=0;i<10;i++) // 不良的风格
for (i = 0; i < 10; i ++) // 过多的空格
x = a < b ? a : b; // 良好的风格
x=a<b?a:b; // 不好的风格、
int *x = &y; // 良好的风格
int * x = & y; // 不良的风格
array[5] = 0; // 不要写成 array [ 5 ] = 0;
a.Function(); // 不要写成 a . Function();
b->Function(); // 不要写成 b -> Function();
对齐最简单的就是括号的对齐了
'' 和 ''独占一行并且位于同一列,层次更加清晰。
长行的拆分主要是控制一行代码不要太长,不然看起来会很累,并且不利于打印。
规则:长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
if ((very_longer_variable1 >= very_longer_variable12)
&& (very_longer_variable3 <= very_longer_variable14)
&& (very_longer_variable5 <= very_longer_variable16))
dosomething();
修饰符的位置
这个主要集中在*和&两个操作符是应该靠近类型还是变量名。
这个我觉得还是看个人吧,书上说的是靠近变量名,我本人其实挺喜欢靠近类型的,比较直观,至于书上说的问题例如int* x, y,y容易被误解成指针,既然这样直接分开定义吧。
注释
这个可太重要了,如果写的代码通篇一个注释都没有的话,我相信过不了多久你回过来看自己之前写的代码,很大概率你是看不懂的,黑人问号一脸懵逼。
注释的使用也有一定的要求:
- 注释是对代码的提示,而不是文档,注释不用很多,但是一定要精,在函数接口、重要的代码行或段落进行提示。
- 注释应当准确、易懂、清晰。
- 不要有缩写
- 注释的位置与被描述的代码相邻,上方或者右方,不要下方。
类的版式
类的版式主要有两种方式:
- 将private 类型的数据写在前面,而将public 类型的函数写在后面
- 将public 类型的函数写在前面,而将private 类型的数据写在后面
前者以数据为中心,注重内部结构;后者以行为为中心,注重接口。
总结:
程序不规范,同事两行泪
第三章 命名规则
良好的命名规则也是每个程序员必备的编程素养。
命名规则没有最好的,只存在一些共性的规则
- 标识符应当直观且可以拼读。例如MaxValue,一眼看去就知道是最大值,不必进行解码。
- 符合最短长度&&最大信息原则。并不是说名字越长越好,熟悉常用的缩写,用最短的长度表达最大的信息,有些时候i,j,k等一些命名也可以用,用在函数内的局部变量会很方便。
- 命名规则尽量与所采用的操作系统或开发工具的风格保持一致。Windows下采用大小写混排的方式,例如MaxValue,而Unix下采用下划线的方式,例如max_value。
- 不要仅靠大小写区分标识符。例如int x, X,x和X容易混淆
- 局部变量与全局变量不要重名
- 变量名采用名词或者形容词+名词的形式,函数采用动词的形式。
总结
前几章主要讲的都是一些规范的问题,看起来和敲代码没什么关系,然而这正是那些刚学编程的人们最容易不注意的地方,容易培养出不好的编程习惯,所以提前学习编程规范不仅仅形成良好的编程风格,而且对以后团体协作也有很大的帮助。
以上是关于读高质量C++/C编程指南1-3章的主要内容,如果未能解决你的问题,请参考以下文章