天天看点

规范的C/C++编程风格(高质量C++编程指南笔记,持续更新~)

①头文件结构:

头文件由三部分内容组成:

( 1 )头文件开头处的版权和版本声明(参见示例 1-1 )。

( 2 )预处理块。

( 3 )函数和类结构声明等。

为 假设头文件名称为  graphics.h ,头文件的结构参见示例 1-2 。

【规则 1-2-1 】为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块。

【规则 1-2-2 】用#include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。

【规则 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 <math. h>          //  引用标准库的头文件
⋯
#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
           

继续阅读