程序经验总结大全

来源:互联网 发布:tk域名注册官网 编辑:程序博客网 时间:2024/06/10 10:49

-

-

-

本文背景:

如果在每一次做项目后,都能把期间遇到的问题或者经验总结下来,相信随着时间的推移会有相当的积累,就算利息吧。

本文目的:

本文将不断更新。内容分为:编码规范、内存管理、异常处理等章节,也会不断更新。

本文内容:

1.编码规范

1.1 命名规则

我们知道,匈牙利命名规则有着两面性,一方面它使得程序具有较高的可读性;而另一方面,它使得当需要更改变量类型时,额外修改的工作增加。以下是常用数据类型的匈牙利表示法,根据你的公司要求可能有所不同。

 

数据类型

前缀

注解

Global Data

g_

 

Constant Data

c_

 

Static Data

s_

 

Class Member

m_

 

 

 

 

char

c

 

int

i/n

 

short

n

 

long

l

 

byte

by

 

unsigned

u

 

bool

b

 

char[]

sz

 

WORD

w

 

DWORD

dw

 

double

d

 

float

f

 

string

s

 

void

v

 

Handle

h

 

Pointer

p

 

Array

a

 

 

1.2 常量定义

·        如果变量不会被改变值,请用const

·        如果期间用到的数字有特殊意义或出现若干次,请定义一个const变量;

·        当定义方法时,请思考以下问题:方法中的参数会不会被改变,如果不会,请定义为const

·        尽量不用宏定义,用const变量代替可以拥有类型检查;

例子:

HRESULT FUNC1(const unsigned char* const pBuffer,bool& bProcess).

 

1.3 可读性编程

·        简单未必好

if-else代替?: 增加可读性。

·        If-else 一定以{}开始和结束

尽管if后面只有一句话,也要用{}

例子:

If (somthing)

{

    i++;

}

 

2.内存管理

2.1 释放内存

·        主动分配

当使用 New Malloc等分配内存时,需要主动的释放不用的内存,以防内存泄露。

如果你对内存管理很感兴趣,请参考本人博客:

http://blog.csdn.net/yeming81/archive/2008/01/19/2052311.aspx

 

·        函数返回指针

      当你调用的方法内部主动分配一个堆内存,然后返回一个指针引用给你时,你需要在用完后释放它,否则会出现内存泄露。

            例子:

             char* pContent=_com_util::ConvertBSTRToString(bstrContent);

            use the pContent to do something;

             delete pContent;

 

·        在方法返回前释放所有资源

当你从方法中返回时,不要忘记释放之前分配的所有资源,包括各种文件句柄资源。

当你在方法中间因为异常返回时,常常会忘记这一点。

例子:

Int Function1()

{

   char[] sz=new char[1024];

   //do something special

   If()

   {

       //remember to do this

       delete sz; 

       return -1;

   }

   //do something special

   delete sz;

}

 

·        使用智能指针 Smart Pointer 代替普通接口

你不必要担心内存释放,因为智能指针会自动释放。

//不要使用它

IMyInterface pInterface //智能指针

CComPtr<IMyInterface > pInterface;

 

请注意,不要做如下操作

pInterface=NULL, 否则智能指针无法释放内存。

 

·        使用 CComBSTR 代替 BSTR

使用BSTR时,你需要自己去释放内存:

BSTR bstrContent;

SysFreeString(bstrContent);

而使用智能指针你不用担心这个。

CComBSTR bstrContent;

 

3.异常处理

·        检查方法返回值

当调用一个方法时,思考这个问题,我是否需要检查返回值去处理异常的情况;虽然可能不会出现问题,但是最好还是做一下检查。

 

·        使用指针之前检查一下是否为NULL

以防抛出空指针异常,请在使用前检查指针的值是否为NULL

 

4.常用函数

4.1文件操作

·        按行读取文件

Ifstream.getline(char* pChar, int size)

当文件一行的长度大于size缓冲时,文件指针不会继续往下移动。

解决办法,用另外一个函数代替:

getline(ifstream&, string)

 

---文章结束