• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    5年前 (2013-05-02)  C++ |   6 条评论  11 
    文章评分 0 次,平均分 0.0

    我们大家一起遵守自己的命名规范,便于交流与代码阅读。打印该页面可以直接在浏览器中选择打印

    以路标识别(landmark recognition,缩写为LMR)项目为例子.

    1.文件命名(以特征类所在文件为例)。头文件与原文件以Lmr开头

    LmrFeature.h
    LmrFeature.cpp
    

    2.头文件保护宏命名。(以项目大写开头,接着写类名,最后加后缀)

    #ifndef LMR_FEATURE_H_
    #define LMR_FEATURE_H_
    #endif
    

    3.类命名。以项目名开头并且首字母大写,后面的每个单词首字母大写,以特征提取类为例。

    class LmrFeatureExtraction
    {
    /* */
    };
    

    4.类或者结构体对象命名。使用前缀my;

    LmrFeatureExtraction myFeatureExtraction;

    5.函数命名。设置值的函数用前缀set,获取值的函数名用get,或者其他动词。 此外提供给外部的接口函数还可以加上项目名作为前缀。(推荐写法:首字母大写)

    //内部私有函数或者类外函数
    void setFeature();
    void getFeature();
    //或,类的public成员函数
    void lmrSetFeature();
    void lmrGetFeature();
    //推荐写法
    void SetFeature();
    void GetFeature();
    void LmrSetFeature();
    void LmrGetFeature();
    

    6.宏定义命名,宏定义命名全大写,单词之间用下划线

    #define PRINT(x)  printf(/**/)
    #define MAX_VALUE 10
    

    7.循环用局部变量,一般无实际意义,只是为了表达循环计数,可以使用i,j。如果遍历操作,还可以定义成index。

    for(int i = 0; i <= 10; ++i){}
    for(int index = 0; index <= 10; ++index){} 

    8.有意义的局部变量(包括函数参数),比如特征个数。以类型缩写开头,接着按照首字母大写排列。

    int iFeatureNum;

    9.临时变量,以t或tmp开头。这样的变量只是用于暂存值。比如交换操作。

    void swap(int iFirstInt, int iSecondInt)
    {
    	int tInt = iFirstInt;
    	iFirstInt = iSecondInt;
    	iSecondInt = tInt;
    }
    

    10.常量命名。以k开头,接着变量类型。比如一周有7天这个常量。

    const int kiDaysInAWeek = 7; 

    11.内置类型及相关变量命名,以下为前缀。

     int --->i
    char --->ch
    double--->f
    float--->f
    long--->l
    long long --->ll
    unsigned --->u
    wchar_t--->w
    string--->str
    bool--->b
    指针--->p
    引用-->ref
    

    12.数组命名。arr开头,可以加上类型名,再接有意义的单词.比如定义一个特征数目的数组。

    int arrIntFeatureNum[100];
    

    arr+Int+FeatureNum

    13.容器对象命名,和类对象命名一样。

    14.模板参数统一使用T表示类型,Arg表示参数

    template <class T, class Arg>

    #########################################################################

    一些调试规范(调试功能最好封装成类的public成员函数)
    控制台程序
    使用DEBUG宏来控制是否输出调试信息,在debug版本时加上宏DEBUG,在Release版本时则取消该宏。
    在需要输出的地方,用PRINT()来代替以前的printf。
    使用PRINT_MORE可以输出包括行号,文件名等信息。

    #define DEBUG
    #ifdef DEBUG
    	#include <stdio.h>
    	#include <stdlib.h>
    #endif
    #ifdef DEBUG
    	#define PRINT(fmt, ...)  do{fprintf(stdout, fmt, ##__VA_ARGS__); fprintf(stdout,"\n");}while(0)
    	#define PRINTS_MORE(s) do {\
    			printf("[%s] [%s] [%d]\n",s,__FILE__,__LINE__);\
    		}while(0)
    	#define PRINT_ERR(fmt, ...)  do{fprintf(stderr, fmt, ##__VA_ARGS__); fprintf(stderr,"\n");}while(0)
    #else
    	#define PRINT(fmt, ...)  do{}while(0)
    	#define PRINTS_MORE(s) do{}while(0)
    	#define PRINT_ERR(fmt, ...) do{}while(0)
    #endif
    

    win32应用程序
    可以使用以下代码,在使用的时候就可以先调用InitConsoleWindow(),然后再printf就可以了。

    #ifndef DEBUG_H_
    #define DEBUG_H_
    #ifdef DEBUG
    #include <conio.h>
    #include <io.h>
    #include <fcntl.h>
    #include <stdio.h>
    void InitConsoleWindow()
    {
     int nCrt = 0;
     FILE* fp;
     AllocConsole();
     nCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
     fp = _fdopen(nCrt, "w");
     *stdout = *fp;
     setvbuf(stdout, NULL, _IONBF, 0);
    }
    #endif
    #endif

    在线浏览:http://unix8.net/实验室代码编写规范试用.html

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/981.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享