①头文件结构:
头文件由三部分内容组成:
( 1 )头文件开头处的版权和版本声明(参见示例 1-1 )。
( 2 )预处理块。
( 3 )函数和类结构声明等。
为 假设头文件名称为 graphics.h ,头文件的结构参见示例 1-2 。
【规则 1-2-1 】为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块。
【规则 1-2-2 】用#include
【规则 1-2-3 】用#include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
【建议 1-2-1 】头文件中只存放“声明”而不存放“定义”在C++ 语法中,类的成员函数可以在声明的同时被定义,并且自动成为内联函数。
这虽然会带来书写上的方便,但却造成了风格不一致,弊大于利。建议将成员函数的定义与声明分开,不论该函数体有多么小。
【建议 1-2-2 】不提倡使用全局变量,尽量不要在头文件中出现象 extern int value 这类声明。
/ / 版权和版本声明见示例 1-1 ,此处省略。
#ifndef GRAPHI CS_H // 防止 graphics.h 被重复引用
#define GRAPHI CS_H
#include // 引用标准库的头文件
⋯
#include “myheader.h” // 引用非标准库的头文件
⋯
void Function1(⋯) ; // 全局函数声明
⋯
class Box // 类结构声明
{
⋯
} ;
#endif
②源文件结构:
定义文件有三部分内容:
(1) 定义文件开头处的版权和版本声明(参见示例 1-1 )。
(2) 对一些头文件的引用。
(3) 程序的实现体(包括数据和代码)。
假设定义文件的名称为 graphics.cpp ,定义文件的结构参见示例 1-3 。
//版权和版本声明见示例 1-1 ,此处省略。
#include “graphics.h” // 引用头文件
⋯
// 全局函数的实现体
voi d Funct i on1(⋯)
{
⋯
}
/ / 类成员函数的实现体
void Box: : Dr aw( ⋯)
{
⋯
}
③空行:
【规则 2-1-1 】在每个类声明之后、每个函数定义结束之后都要加空行。
【规则 2-1-2】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应
加空行分隔。
函数之间的空行:
// 空行
void Function1(⋯)
{
⋯
}
// 空行
void Function2(⋯)
{
⋯
}
// 空行
void Function3(⋯)
{
⋯
}
函数内部的空行:
// 空行
while (condition)
{
statement1;
// 空行
if (condition)
{
statement2;
}
else
{
statement3;
}
// 空行
statement4;
}
④代码行:
【规则 2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样
的代码容易阅读,并且方便于写注释。
【规则 2-2-2 】if 、for 、while 、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{},这样可以防止书写失误。
//规范
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)
{
...
}
//不规范
if (width < height){...}
【建议 2-2-1 】尽可能在定义变量的同时初始化该变量(就近原则)
如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。如果引用了未被初始化的变量,可能会导致程序错误。本建议可以减少隐患。例如:
int width = 10; // 定义并初绐化 width