代码风格

来源:互联网 发布:淘宝店铺收藏怎么看 编辑:程序博客网 时间:2024/06/10 07:08

头文件的作用
申明将被程序用到的函数、变量和定义类型(包括:常量、类定义、模板定义……)
正确使用头文件
第1点:
头文件中应该只包含函数和变量的申明,而不是定义。
例如:
在 main.cpp 中
 int mousex;
在 headers.h 中
 extern int mousex;
如果多个cpp文件include了一个定义了变量的头文件,那么你将看到下面的错误信息
"error LNK2005: "int mousex" (?mousex@@3HA) already defined in headers.obj"
第2点:
在定义变量的地方初始化它们的值,而不是在申明它们的地方
例如:
在 main.cpp中
 int mousey=0;
在 headers.h中
 extern int mousey;
如果在头文件中初始化变量,那么编译器会认为这是一个定义,于是出现如下的错误信息:
"error C2086: 'int mousey' : redefinition"
第3点:
为了避免重定义,最好把头文件用以下的定义包含起来(现在编译器如VC++.net也可以用#pragma once代替)
#ifndef __HEADERS_H__
#define __HEADERS_H__
.
code
.
#endif __HEADERS_H__
匈牙利命名法
为了帮助程序员记忆变量的类型,Charles Simonyi发明了匈牙利命名法。使用它可以一目了然的在浩瀚的代码海洋中识别出变量的类型。


前缀
 类型
 例如
 
b
 布尔型
 bGameOver
 
by
 Byte或Unsigned Char
 byChoice
 
c
 Char
 cYesNo
 
cx / cy
 尺寸
 cxWidth
 
dw
 DWORD, Double Word 或Unsigned Long
 dwCounter
 
fn
 函数
 fnGetMeOver
 
h
 Handle
 hWindow
 
i
 int (Integer)
 iCounter
 
l
 Long
 lCounter
 
n
 Short int
 nChange
 
p
 指针
 pMakeChoice
 
s
 String
 sName
 
sz
 以0结尾的字符串
 szName
 
w
 WORD Unsigned int
 wCounter
 
x, y
 坐标
 x
 

*参见: http://visualbasic.about.com/library/weekly/blhungarian.htm
文字间隔
文字的间隔对程序的结构和可读性非常重要
下面的两段程序哪个更容易读懂?
main()
{
char name[32]={"Red Cow Likes Milk"};
for(int t=0;t<16;t++)
{
t+=1;
for(int j=0;j<16;j++)
{
cout<<name[j];
}
cout<<name[t];
}
}

main()
{
  char name[32] = {"Red Cow Likes Milk"};

  for( int t = 0; t < 16; t++ )
  {
    t+=1;
    for( int j = 0; j < 16; j++)
    {
      cout<<name[j];
    }
     cout<<name[t];
  }
}
接下来继续看
一行代码中的间隔
好的风格:
my.problem = FunkyG( my.bag + my.pipe * my.time);
不好的风格:
my.problem=FunkyG(my.bag+my.pipe*my.time);
变量名
选择最能说明变量作用的名字,如:
fMoneyAmount
fHitPoints
vDirection
但如果去掉字母中的元音后
fMnyAmnt
fHtPnts
vDirctn
非常混淆不是吗?还不如试试只用前三个字母
vDirctn = vDir
过长的变量或函数名也是不可取的(有时简直就是噩梦)
void RotationToFloatAngleDegreeDirection(float fRotation, Vector_t * vDirection); // 不好
void RotationToDirection(float fRotation, Vector_t * vDirection); // 好

void TheFunctionThatSetsAVariableAlwaysToZero(int * iVar); // 不好
void VarToZero(int * iVar); // 好

float TimeInCanadiaInHours(); // 不好
float Time_Canadia(); // 好
在程序中定义变量
全局变量:
议尽可能少用全局变量,因为不正确的是用很容易引起和局部变量的混淆,如:
int j=756;
void printJandQ(int Q)
{
  int j=0;
  cout << j << q;
}
局部变量的定义:
尽量不要在函数中间定义变量,这会导致可读性的下降和变量作用范围的混淆,在每个函数的开始处定义它的局部变量。(译者注:对于这条建议本人持保留态度)
静态分配和动态分配:
不好的风格:
struct DosFile_t
{
  char * name;
  int id;
}
如果一个字符串的长度有限制最好使用静态分配,如下:
struct DosFile_t
{
  char name[8];
  int id;
}
在初始化变量时不要忘记付值:
不要认为一个变量在定义出来后就已经被付值为0了,记住手动付0给它们,如果是结构就用memset将其全部清0
int j=0;
DosFile_t * dfFileList;
dfFileList=(dfFile*)malloc(sizeof(dfFileList)*8);
memset(dfFile,0, sizeof(dfFileList)*8);
英文原版:http://www.studentgamedevelopers.com/tutorials/codingstyles.htm
Brian Burleson: marlboro@thelenscap.com
Translated by: soft http://www.gpgame.net
 

更多分享请关注:软信网-编程-http://www.iis365.net.cn

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 八个半月的宝宝不爱吃饭怎么办 十个半月宝宝不爱吃饭怎么办 九个半月宝宝不爱吃饭怎么办 七个半月宝宝不爱吃饭怎么办 8个半月宝宝不爱吃饭怎么办 八个半月宝宝不爱吃饭怎么办 特百惠杯子摔坏后不给换怎么办 特百惠水杯摔裂了怎么办 焖烧杯摔瘪了怎么办 苦瓜和虾一起吃中毒怎么办 乐扣盖子坏了怎么办 小孩上课坐不住好动怎么办 5小孩晚上不睡觉怎么办 一年级的孩子上课好动怎么办 一岁宝宝太好动怎么办 3岁宝宝太好动怎么办 孩子学习注意力不集中怎么办 1岁宝宝皮肤黄怎么办 三岁宝宝太皮怎么办 一岁宝宝太皮了怎么办 5岁宝宝学习太皮怎么办 2岁宝宝太皮了怎么办 身上的皮肤很干怎么办 小孩子挑食厌食不吃饭怎么办 1岁宝宝特别淘气怎么办 4岁宝宝有多动症怎么办 3岁宝宝有多动症怎么办 6个月婴儿睡眠少怎么办 7个月婴儿睡眠少怎么办 孩子好动注意力不集中怎么办 学生在课堂上爱讲话怎么办? 幼儿园老师圢小孩脸怎么办 宝宝上幼儿园坐不住怎么办 宝宝在幼儿园总是坐不住怎么办 早教课上宝宝坐不住怎么办? 孩子在幼儿园上课坐不住怎么办 小孩不会写拼音a怎么办 小朋友上课注意力不集中怎么办 一年级孩子上课爱说话怎么办 一年级小孩不听老师话怎么办 大班幼儿规则意识差怎么办