• 编码规范


    自己的编码有很多不规范的地方:

    先规定如下:

       如下是C++的编码规范:
     1        前言        4
    2        文件结构        4
    2.1        版本的声明        4

    位置:版本的声明位于头文件和定义文件的开头
    规范:               
    /*
    * 文件名称:filename.h
    * 摘    要:简要描述本文件的内容
    *
    * 当前版本:1.1
    * 作    者:输入作者(或修改者)名字
    * 完成日期:2007年1月29日
    *
    * 取代版本:1.0
    * 原 作 者:输入原作者(或修改者)名字
    * 完成日期:2001年5月10日
    */

            
    2.2        头文件的结构        4
    开始位置:
    /*
    * 文件名称:filename.h
    * 摘    要:简要描述本文件的内容
    *
    * 当前版本:1.1
    * 作    者:输入作者(或修改者)名字
    * 完成日期:2007年1月29日
    *
    * 取代版本:1.0
    * 原 作 者:输入原作者(或修改者)名字
    * 完成日期:2001年5月10日
    */
    #include <math.h>                        // 引用标准库的头文件

    #include “myheader.h”         // 引用非标准库的头文件

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

    class Box                                 // 类结构声明
    {

    };
    #endif

    2.3        定义文件的结构        5
    开始位置:
    /*
    * 文件名称:filename.h
    * 摘    要:简要描述本文件的内容
    *
    * 当前版本:1.1
    * 作    者:输入作者(或修改者)名字
    * 完成日期:2007年1月29日
    *
    * 取代版本:1.0
    * 原 作 者:输入原作者(或修改者)名字
    * 完成日期:2001年5月10日
    */
    #include “graphics.h”        // 引用头文件

    // 全局变量定义体
    int  gVar;

    // 全局函数的实现体
    void Function1(…)
    {

    }
    // 类成员函数的实现体
    void Box::Draw(…)
    {

      }
    2.4        目录结构        6
    如果文件数目超过十个,则需要分别将头文件和定义文件保存到不同的目录,便于维护。
      例如可将头文件保存于include目录,将定义文件保存于source目录(可以是多级目录)。
    3        程序结构        6
    3.1        缩进        6
    {
       cout<<"{..}之后的内容需要空两格,并保证不要使用制表符"<<endl;      
    }
    3.2        空行        6
    1.类声明、函数定义之后都要空行:
    void  Function(...)
    {
       cout<<"function1"<<endl;
    }
    //需要空行
    void  Function()
    {
       cout<<"function2"<<endl;
    }
    //继续空行

    2.函数体内,关系密切的语句之间不加空行,其他的地方应加空行分隔。
    while (condition1)
    {
      statement1;
      //空一行
      if(condition)
      {
        statement2;  
      }
      else
      {
        statement3;
      }
      //空一行
      statment4;
    }
    3.3        代码行        7
    1.一行代码只做一件事情,目的是为了方便注释和阅读
      int flag1;        //标记1
      int flag2;        //标记2
    2.if、while、for独占一行
      if (condition)
      {
        dosomething(); //执行体
      }
     
      for (initalization;condition;update)
      {
        dosomething(); //执行体
      }
    3.变量的定义满足"就近原则",变量的定义的同时要进行初始化
      int iWidth;     //宽度
      int iHight;     //高度
    3.4        代码行内的空格        7

    1.留空格的情况:

    1.1.关键字之后要留空格,如 const、virtual、inline、case,if、while、for也需要留一个空格再与 ( 结合.eg: if (condition)
    1.2.","之后要留空格,如 void Function(x, y, z)
      ";"如果不是一行的结束,也需要空格,for (initialization; condition; update)
    1.3.赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”
    等二元操作符的前后应当加空格.

    2.不留空格
    2.1. 函数名之后不留空格 void Function(x, y, z)
    2.2. (;)                        //这种情况的话就不需要空格
    2.3.一元操作符如“!”、“~”、“++”、“—”、“&”(地址运算符)等前后不加空格
    2.4.对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空        格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))
    3.5        对齐        8
    void Function(int x)
    {
       ...//前面空2个空格
    }

    for()
    {
      for()
      {
         ..//嵌套{}的情况
      }
    }
    3.6        长行拆分        9
    1.代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。
    2.长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
    If ((very_longer_variable1 >= very_longer_variable12)
    && (very_longer_variable3 <= very_longer_variable14)
    && (very_longer_variable5 <= very_longer_variable16))
    {
        dosomething();
    }
    virtual Cmatrix CmultiplyMatrix (Cmatrix leftMatrix,
                                     Cmatrix rightMatrix);
    for (very_longer_initialization;
             very_longer_condition;
             very_longer_update)
    {
            dosomething();
    }

    4        命名规则        3
    1.类/结构

    1.1. 类的命名推荐用"名词"或"形容词+名词"的形式,例如:"CAnalyzer", "CFastVector" ....


    2.函数

    2.1. 函数名应当使用"动词"或者"动词+名词"(动宾词组)的形式。例如:"GetName()", "SetValue()", "Erase()", "Reserve()" ....
     
    2.2.保护成员函数 保护成员函数的开头应当加上一个下划线“_”以示区别,例如:"_SetState()" ....
     
    2.3.私有成员函数 类似地,私有成员函数的开头应当加上两个下划线“__”,例如:"__DestroyImp()" ....

    2.4.虚函数 虚函数习惯以“Do”开头,如:"DoRefresh()", "_DoEncryption()" ....
     
    2.5.回调和事件处理函数 回调和事件处理函数习惯以单词“On”开头。例如:"_OnTimer()", "OnExit()" ....
     

     

    变量

    变量应该是程序中使用最多的标识符了,变量的命名规范可能是一套C++命名准则中最重要的部分:

    变量的命名 变量名由 作用域前缀+类型前缀 +一个或多个单词组成。为便于界定,每个单词的首字母要大写。
    对于某些用途简单明了的局部变量,也可以使用简化的方式,如:i, j, k, x, y, z ....

     
     
    作用域前缀 作用域前缀标明一个变量的可见范围。作用域可以有如下几种:

    前缀 说明
    无 局部变量
    m_ 类的成员变量(member)
    sm_ 类的静态成员变量(static member)
    s_ 静态变量(static)
    g_ 外部全局变量(global)
    sg_ 静态全局变量(static global)
    gg_ 进程间共享的共享数据段全局变量(global global)

    除非不得已,否则应该尽可能少使用全局变量。

    类型前缀 类型前缀标明一个变量的类型,可以有如下几种:
    前缀 说明
    n 整型和位域变量(number)
    e 枚举型变量(enumeration)
    c 字符型变量(char)
    b 布尔型变量(bool)
    f 浮点型变量(float)
    p 指针型变量和迭代子(pointer)
    pfn 特别针对指向函数的指针变量和函数对象指针(pointer of function)
    g 数组(grid)
    i 类的实例(instance)
    对于经常用到的类,也可以定义一些专门的前缀,如:std::string和std::wstring类的前缀可以定义为"st",std::vector类的前缀可以定义为"v"等等。
     
    类型前缀可以组合使用,例如"gc"表示字符数组,"ppn"表示指向整型的指针的指针等等。

    推荐的组成形式 变量的名字应当使用"名词"或者"形容词+名词"。例如:"nCode", "m_nState","nMaxWidth" ....

    5        程序必要模块        11
    5.1        程序LOG        11
    5.1.1        跟踪日志        11
    跟踪日志是为了开发人员更好定位程序的问题,此日志只供开发人员自己使用。该类型的日志路径,一天一个文件夹,文件夹以“年月日”命名,如“2007124”。内容按如下格式填写:
    信息内容:
    时间:2007-1-24 13:49:25
    信息:XXXXXXXXXXXX
        时间:2007-1-24 13:49:25
        信息:XXXXXXXXXXXX
    5.1.2        监控日志        11
     正常日志
      正常日志文件以线程为单位,一个线程一个文件,以应用ID加上线程ID为文件名,如100001_1.log(应用ID为100001,线程ID为1),其中应用ID是事先分配(根据监控程序的配置分配),而线程ID则根据开发人员自行定义,遵循连续性原则(从1开发)。

     错误日志
     又包括数据错误和其他错误,数据库错误的文件名格式为:应用ID_年月日_dberr.log如:100001_20081224_dberr.log(应用ID为100001,时间20081224)。其他错误的文件格式为应用ID_年月日_err.log如:100001_20081224_err.log(应用ID为100001,时间20081224)。
     信息内容:
    时间:2007-1-24 13:49:25
    信息:XXXXXXXXXXXX
        时间:2007-1-24 13:49:25
        信息:XXXXXXXXXXXX

  • 相关阅读:
    第一阶段冲刺第七天
    第一阶段冲刺第六天
    PHPCMS V9.6.0 SQL注入漏洞分析
    metinfo小于v6.2.0版本SQL盲注利用脚本
    metinfo小于v6.2.0版本通杀SQL盲注漏洞分析
    PHPSHE 1.7前台SQL注入漏洞分析
    sqli-labs Less-1~~~Less-23
    内网渗透靶场测试:(二)hash传递和黄金票据
    内网渗透靶场测试:(一)反向代理,互联互通
    intel:spectre&Meltdown侧信道攻击(五)—— DRAM address mapping
  • 原文地址:https://www.cnblogs.com/xianqingzh/p/1391841.html
Copyright © 2020-2023  润新知