程序经验总结大全
来源:互联网 发布: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)
---文章结束
- 程序经验总结大全
- 程序开发经验总结
- Linux程序开发经验总结
- 程序开发经验总结
- 微信小程序-开发经验总结
- 多线程程序调试个人经验总结
- (干货)微信小程序开发经验总结
- 微信小程序开发一些经验总结
- 微信小程序开发经验总结(一)
- 微信小程序开发经验总结(二)
- 微信小程序开发经验总结(三)
- 微信小程序开发经验总结(四)
- 微信小程序开发经验总结(五)
- 微信小程序开发经验总结(六)
- 微信小程序开发经验总结(七)
- 经验总结:SVN与CVS的区别大全
- VB.net取程序路径经验总结
- windows 7 内核程序开发经验总结
- NetBeans中文社区文档/教程翻译项目
- 和谐一日....还剩几天就放假了...
- The Porter Stemming Algorithm
- extern "C" 解析
- 李嘉欣被爆秘密结婚 婚礼保密1.7亿豪宅作礼物
- 程序经验总结大全
- JBossTools实践系列:开发EJB3 EntityBean
- CWnd与CWinThread
- dll学习
- 文件操作
- 学习过程中记忆的重要性
- 菜单
- IE的getElementById……
- Serv-U 6.X 的提权脚本