1,CALLBACK是什么?
CALLBACK是一种调用约定,在VC的头文件中,应该是windows.h中,被定为__pascal,也就是pascal调用约定。为什么有调用约定,以及调用约定有什么用,在我的:http://hi.baidu.com/piaoliuxing126/blog/item/4c5fe863aaf6eb690d33fa57.html这篇文章中有详细的说明,当然,是转载别人的。他山之玉,可以攻石嘛:)
2,当你声明了一个变量之后,要明了该变量的类型在所属平台上占据的字节数,同时明了其表值范围,绝对不允许超过其范围,否则,后果很严重。
为什么要这样呢?实践表明,虽然我们都知道这个道理,但是实际的开发中,仍然容易忘记,将超过某变量范围的数赋给它,然后使用它。编译的时候不出错。我们认为万事大吉。但运行或者测试的时候发现结果不正确。这时候开始BUG定位,那个过程会累死你。
3,系统调用会不会失败?
我们在编程的时候,如果不涉及跨平台应用的模块,通常会调用一些系统函数,比如API,或者别人编好的函数库或者类库,这时候我们常常认为它们应该 是不会出错的,特别是系统的API,认为是微软的东西,应该绝对正确的,但是程序永远都不会全部正确,这时候,如果它们出错,你的处理里面有没有对该种情 况的处理代码,如果有,那么,处理的合适么?如果没有,请考虑之。不过如果一个系统函数返回值是void,那么,我们可以不必考虑它的失败。因为其概率实 在太低。
4,关于return,我们提倡尽量少用return,特别是在有动态内存分配的时候,为什么呢?
return是一个很好用的东东,一旦在程序中不符合某一个条件,就可以使用return返回,停止该函数的执行,下面的代码不再被执行,提高了效率,但 是使用return的时候,如果程序中有很多选择逻辑,这样函数就有很多出口,而且可能增加嵌套层数,而如果这时候有动态内存分配的话,那么很多的 return返回时,很有可能忘记delete,这时候产生了很多野指针。纵使这些指针式局部的,在动态存储区分配的,生存期只是在该函数过程中,函数返 回时被系统自动回收了,可这并不是一种好的编码风格。
5,if和else一般来说,要成对出现,然后使用缩进对齐,这样逻辑清晰,可读性强。但是对于有些逻辑来说,可能else里面根本没有实际处理的语句,只是一个空语句或者一个空的复合语句而已。这样,也可以只要一个If.
6,好的代码不仅仅要对各种可能的情况都加以处理,而且还不能有冗余。对于可有可无的代码,要坚决去除。因为那会占据运行时间。
7,第四条中,我说了“纵使这些指针式局部的,在动态存储区分配的,生存期只是在该函数过程中,函数返回时被系统自动回收了,可这并不是一种好的编码风格”,可是实际上编译器究竟是如何处理它们的呢?
在,《c++面向对象高效编程》(人民邮电出版社出版发行,美Kayshav Dattatri著,潇湘工作室译)这本书中,有介绍:对于编译器自动创建的对象,在超出生命期后会自动释放。对于使用new显式创建的对象,必须手动释放。