实验室代码编写简略命名规范试用

2013年5月2日 由 Creater 留言 »

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

以路标识别(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

广告位

发表评论

你必须 登陆 方可发表评论.