总结的编码规范

    技术2022-05-20  36

    1、宏定义格式:每个单词用下划线隔开。示例:

    #define           XXX_YYY            20

    #defineXXX_YYY20各用两个tab隔开

    2、一律不得出现常量,对于出现的常量(指数字和字符串),用意义明显的宏定义(或枚举变量)代替。

    3、每个函数体不能过长,原则上不超过200

    4、每个文件不能过长,原则上不超过2500

    5、类的规则:

    (1)构造函数与析构函数放置在public下,并与其他public隔开

    (2)消息映射函数统一放在一个public下,格式如下:

           LRESULT    

                  OnXxx(

                                  UINT uMsg,

                                  WPARAM wParam,

                                  LPARAM lParam,

             BOOL& bHandled);

    3)函数的实现体格式:

    BOOL

    ClassName::FunctionA(CString strVal)

    ....................

    6、函数中不出现复杂的计算公式,一律用宏定义代替,定义时,一定要注意变量加空格。

    7、函数必须用意义明确的英文单词定义。

    8、每个函数必须注释其功能(简单函数除外),重要变量也要注释其用处。

    9、特殊变量的类型如果考虑到以后可能更改的话,用typedef来重定义一下,以后要该的话,只需更改一处就可以了。

    注意要与模板编程联系到一起,做到类型“复用”。

    10、CDCattachdetach要成对使用,GetDCReleaseDC成对使用。

    切记,否则容易造成GDI句柄泄露

    11、类指针的使用一定要判断当前指针是否为NULL

    这个功能可以用一个宏定义来实现。如果类似的宏定义多的话,可以总结在一个单独的文件里

    12、对于变量赋值二选一的操作,建议用三元操作符 ?:

    15、如果一个宏是由两外两个宏计算得到一定要加括号。例如:

    #define           MAX_CAND_NUM              (CANDCEL_ROW_NUM*CANDCEL_COL_NUM)

    16、一个工程大致分为下面几部分:

    (1)窗体的界面绘制类:负责子窗体的定位。

    (2)消息处理类:绘制类中只负责接受消息,此类负责处理(12可以合并)。

    (3)工具类:负责数据合法性校验。不能有成员变量,也不进行宏、常量的定义(除非必须),完全由传进来的参数,按照某种规则进行处理。

    (4)数据处理类:负责数据的产生、处理。按照界面绘制类所需的格式进行返回,中间不需其他工具类的处理,但少量数据可以由工具类进行数据处理类和界面绘制类的中间转换。此类里不能有extern定义的全局变量的引用,如果需要则传引用。

      

    17、在绘图函数中不要做与绘制不相关的一切操作,只允许对背景、图片、或显示的更改,其他任何操作都禁止,任何!

    18、函数命名规则

    1)获取某个字段。形式:修饰限定词 + Of + 字段名。 

    20、利用抽象类等技术尽量提高代码的可重用性。(见例子

    21、出了函数功能单一外,变量功能也要单一。即变量要尽量保持只有在循环、递归或者结果收集等他殊情况下,赋值次数才能够超过一次。

    22、界面主程序尽量不含有与界面控制相关的变量、函数,这些变量、函数一律组合成一个合适的对象。

    23、If等表达式的条件尽量简单,如果过于复杂则将复杂表达式(或其中一部分)的结果存放到一个临时变量,以此变量名称来解释表达式的用途。

    24、对于构造函数比较好的写法是,使用所谓的member intialization list(成员初值列表)替换赋值动作,例如:

    ABEntry:ABEntry():theName(name),numTimesConsulted(0)

    {     }

    常规构造函数如下,但效率通常不如上面的高。

    ABEntry:ABEntry()

    {    

    theName = name ; numTimesConsulted = 0;

    }

    25、写类或者函数时候,要充分考虑将来所有的可能性。例如参数、返回值的类型有可能变动。例如一个函数CString  GetText  ( int  index );其实这个函数在将来有可能返回其他类型例如ushort类型,这个时候函数名也要随着更改,如果这个函数返回的是ushort类型,函数名却潜意识告诉我们他返回一个Text,,而Text容易让我们想到Cstring(或与之兼容或可以转换的类型,例如char *)。另外这个函数的参数index,也有可能更改因为我们有可能用一个CString,去索引另外一个CString

    26、所有的数据都应该初始化,不管这是一个内置类型还是自定义类型。

    27、关于数据结构、宏定义和常量定义最好都定义在一个单独的文件中,这样方便后来扩展时候使用。


    最新回复(0)