- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC 代码的编写和调试
要避免错误,首先要从好的设计开始。对于程序的设计,需考虑到程序的两个特性:
简单性
大多数常见的错误来源于程序设计中不必要的复杂成分。一个好的设计应该反映问题本身的要求,而不必为了刻意追求“满足将来的需要”而添加不必要的特性。实际上,简单优雅的设计比那些复杂的设计更能迎合未来的需求。
耦合性
耦合(decoupling)性用来衡量不同对象之间的依赖程度。松耦合的程序易于理解和实现, 易于测试和维护,且这种程序包含错误的可能性小,错误也较容易发现和清除。
二 编程风格
编程风格是个人问题,有很大的随意性。一个好的编程风格不仅让代码易理解,也易于调试。好的编程风格包括:
清晰地书写代码
如果没有必要,尽量不要使用语言中的高级特性,因为这些特性不易于理解和调试。使用大多数程序员都能理解的语言成分来书写代码不易犯错且易于理解和维护。
编写结构良好的代码
当程序崩溃时所能得到的最基本的调试信息是源代码文件、问题所在行的行号和一个调用栈(call stack)。调用栈是调试程序时最有帮助的部分,它提供错误出现的上下文,也就是带参数的函数调用序列。你书写的代码结构越好,调用栈就能给你越多信息。
使用良好的标识符
一个好名字能使你 的代码更容易 被理解和维护。 流行的匈牙利命 名法(Hungarian Notation)实际上是把标识符的意义和表示方法结合起来。现在,匈牙利命名法表现出不少的局限性,匈牙利命名法过于看重前缀的作用,对一个变量的表达信息不完整,实际上并没有 传递多少有用信息,它使代码难于阅读,难以维护。一个好的命名传统是指示出变量的作用 域以便在需要的时候检查它的定义,并明确地指出一个变量是全局的、局部的还是成员数据。依赖变量的定义比依赖匈牙利前缀更加有用和可靠。
好的名字能够用平常的语言概括出该标识符所代表的实体的含义。在选择类、函数、变量的名字时可以考虑以下几个原则:
取简单的描述性名字,好的名字能简要地概括出这个标识符代表的含义。
避免简写,简写使标识符难于阅读和记忆,尽量使用混合大小写的完整的单词。避免相似性的文字,避免混淆。
避免采用一般的或随机产生的名字,而应采用有实际意义的名字。如欲从按钮类派生位图按钮,取一个 CBitmapButton,而不是 CMyButton。
用简单的语句行
在 VC 中,一行可写多个语句。但调试是面向行的,过于复杂的行难于调试。因此,从调试的角度出发,每一个语句都应独自成行。
使用统一的排列
统一的排列方式使类、变量的定义和语句更加明显。
用括号使书写清晰
你不一定能都记住各种运算符的优先级和结合律,而使用多余的括号并不影响编译后的代码。因此,如果你不能确定是否需要括号时,请加上它。
使用好的注释
用好的注释能使你的代码不易出错,而且便于其他程序员阅读,便于理解和维护。三 编写程序时应注意的问题
充分利用 VC++的特性
可用下列技术来充分利用 VC++的编译器的特性:
用 const 代替#define 来创建常量;
用 enum 代替#define 来创建常量集合;
用内联(inline)函数代替#define;
这三种技术用 C++而不是 C 预处理。使用预处理的问题在于编译器对于预处理器所作的事情一无所知,因此无法用数据类型检查错误和不一致的地方。预处理的名字不在符号表里,因此也不能用调试工具来检查预处理常量。相似地,预处理宏被编译进去,不能用调试工具跟踪。编译器能充分了解 const、enum 和 inline 语句,从而能在编译的时候对出现的问题发出警告。
但预处理在很多调试代码中起重要作用。调试代码经常需要从非调试代码里面得到不同的行为,而最有效的办法就是让预处理为调试创建不同的代码。
用 new 和 delete 代替malloc 和 free;
在创建对象、类型的安全性和灵活性方面。使用 new/delete 比 malloc/free 要好。另外,
new 可被重载,提供了更大的灵活性。
用输入输出流(iostreams)代替stdio。
使用 C++输入输出流( 和)而不使用 C 标准输入 输出库( printf/sprintf 和scanf/sscanf ),有利于安全性和扩展性。从调试的角度来看,标准输入输出函数的最大问题在于编译器不能对控制流参数进行任何类型检测,而输入输出流的任何问题都能在编译时检测出来。
使用头文件
要在头文件中声明所有共享的外部符号,而且保留函数原型中的参数名。把所有的共享定义放在头文件中,不要在.cpp 文件里面看到extern 关键字。
初始化变量
在使用变量之前一定要把它们初始化。在初始化之前就使用变量肯定会产生错误。通常不需对对象进行初始化,对对数据成员应在构造函数中初始化。必须明确地为在栈中和堆中分配
文档评论(0)