侧边栏壁纸
  • 累计撰写 125 篇文章
  • 累计创建 16 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录
C++   

C++的编程规范学习

C++的文件结构

在C/C++中通常都存在两个文件。
     - 头文件以.h为后缀的,用于保存程序的声明。
     - 定义文件或源文件以.cpp等形式存在,用于保存程序的实现。

头文件

头文件的主要作用在于多个代码文件全局变量(函数)的重用、防止定义的冲突,对各个被调用函数给出一个描述,其本身不需要包含程序的逻辑实现代码,它只起描述性作用,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库中寻找相应的实际定义代码。
头文件由三个部分组成:
(1) 开头的版权和声明。(主要体现文件的版本信息,例如完成时间、作者、摘要介绍等)
(2) 预处理块。(引入头文件、全局函数、宏定义等)
(3) 函数与类结构声明等。

● 【规则 1】为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预
处理块。
● 【规则 2】用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
● 【规则 3】用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)

#ifndef GPS_H // 防止 GPS.h 被重复引用 
#define GPS_H 
 
#include <math.h> // 引用标准库的头文件 
#include “myheader.h” // 引用非标准库的头文件 

void Function1(…); // 全局函数声明

class Box // 类结构声明 
{ 
… 
}; 

#endif

● 【建议 1】 在有多个 .h 文件和多个 .c 文件的时候,可以使用一个 global.h 的头文件来包括所有的 .h 文件,然后在除 global.h 文件外的头文件中包含 global.h 就可以实现所有头文件的包含,同时不会乱。方便在各个文件里面调用其他文件的函数或者变量。

定义文件或源文件

定义文件有三部分内容:
(1) 定义文件开头处的版权和版本声明(参见示例 1-1)。
(2) 对一些头文件的引用。
(3) 程序的实现体(包括数据和代码)

#include “GPS.h” // 引用头文件 
// 全局函数的实现体 
void Function1(…) 
{ 
… 
} 
 
// 类成员函数的实现体 
void Box::Draw(…) 
{ 
… }

共性命名规则

直到现在应该不存在大家都认同的一种命名规则,那就总结一些应该是的共性规则。

● 【1】标识符应当直观且可以拼读,可望文知意。标识符采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。
● 【2 】标识符的长度应适当不可太长。单字符的名字也是有用的,常见的i,j,k,m,n,x,y,z 等,它们通常可用作函数内的局部变量。
● 【3 】尽量避免名字中出现数字编号,如 Value1,Value2 等,除非逻辑上的确需要编号。
● 【4 】类名和函数名用大写字母开头的单词组合而成。
          例如:class Node; void Draw(void);
● 【5 】变量和参数用小写字母开头的单词组合而成。
          例如:BOOL flag; int drawMode;
● 【6 】常量全用大写的字母,用下划线分割单词。
          例如:const int MAX = 100; const int MAX_LENGTH = 100;
● 【7 】静态变量加前缀 s_(表示 static)
          例如:static int s_initValue; // 静态变量
● 【8 】要全局变量,则使全局变量加前缀 g_(表示 global)。
          例如:int g_howManyPeople; // 全局变量
● 【9 】类的数据成员加前缀 m_(表示 member),这样可以避免数据成员与成员函数的参数同名。

表达式和基本语句

运算符的优先级

在这里插入图片描述
● 【1 】由于将表中内容熟记是比较困难的,为了防止产生歧义并提高可读性,应当用括号确定表达式的操作顺序。
          例如:word = (high << 8) | low;if ((a | b) && (a & c));

if语句

● 【1 】不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较。
          例如:if (flag) 、if (!flag) // 正确写法 if (flag == TRUE)、if (flag == 1 ) // 不正确写法
● 【2 】应当将整型变量用“”或“!=”直接与 0 比较。以免被认为是布尔变量。
          例如:if (value == 0) // 正确写法 if (value) // 不正确写法
● 【3 】不可将浮点变量用“
”或“!=”与任何数字比较。
          例如:if (x == 0.0) // 隐含错误的比较,应转化为
if ((x>=-EPSINON) && (x<=EPSINON)) 其中 EPSINON 是允许的误差(即精度)。
● 【4 】应当将指针变量用“==”或“!=”与 NULL 比较。尽管 NULL 的值与 0 相同,但是两者意义不同。

goto语句

由于 goto 语句可以灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,goto 语句经常带来错误或隐患。它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句。

goto state; 
String s1, s2; // 被 goto 跳过 
int sum = 0; // 被 goto 跳过 … 
state: 
…

但goto在一些应用场合却能大显神通,节约资源。

0

评论区