VC6常见问题

  • 格式:doc
  • 大小:117.50 KB
  • 文档页数:14

版本历史目录第一篇快捷键和代码整洁一、快捷键常用快捷键及其功能如下(按一般使用顺序):F9 设置断点(Ctrl+F9删除所有断点)F5 未编译:编译并执行;调试中:执行至下一断点F10 单步执行F11 跟踪进入函数内部(该函数实现所在工程和代码应该加入打开的dsw文件)TAB 插入一个制表符,用于对齐Ctrl+F8 自动对齐Ctrl+TAB 在已打开最近两个文档中切换,按住Ctrl不松开的情况下按TAB则可以在多个文档中切换Ctrl+B 设置条件断点Ctrl+H 文本替换Ctrl+F 查找文本Ctrl+S 保存,多保存,以免异常关机丢失数据Ctrl+Z 撤销上一次更改二、代码整洁之道参考林锐博士《高质量C++编程指南》2.1 空行空行起着分隔程序段落的作用。

空行得体(不过多也不过少)将使程序的布局更加清晰。

空行不会浪费内存,所以不要舍不得用空行。

●【规则2-1-1】在每个类声明之后、每个函数定义结束之后都要加空行。

参见示例2-1(a)●【规则2-1-2】在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。

参见示例2-1(b )示例2-1(a) 函数之间的空行示例2-1(b) 函数内部的空行2.2 代码行●【规则2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。

这样的代码容易阅读,并且方便于写注释。

●【规则2-2-2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。

不论执行语句有多少都要加{}。

这样可以防止书写失误。

示例2-2(a)为风格良好的代码行,示例2-2(b)为风格不良的代码行。

示例2-2(a) 风格良好的代码行示例2-2(b) 风格不良的代码行✧【建议2-2-1】尽可能在定义变量的同时初始化该变量(就近原则)如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。

如果引用了未被初始化的变量,可能会导致程序错误。

本建议可以减少隐患。

例如int width = 10; // 定义并初绐化widthint height = 10; // 定义并初绐化heightint depth = 10; // 定义并初绐化depth2.3 代码行内的空格●【规则2-3-1】关键字之后要留空格。

象const、virtual、inline、case 等关键字之后至少要留一个空格,否则无法辨析关键字。

象if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。

●【规则2-3-2】函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别。

●【规则2-3-3】‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。

●【规则2-3-4】‘,’之后要留空格,如Function(x, y, z)。

如果‘;’不是一行的结束符号,其后要留空格,如for (initialization; condition; update)。

●【规则2-3-5】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加空格。

●【规则2-3-6】一元操作符如“!”、“~”、“++”、“--”、“&”(地址运算符)等前后不加空格。

●【规则2-3-7】象“[]”、“.”、“->”这类操作符前后不加空格。

✧【建议2-3-1】对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格,如for (i=0; i<10; i++)和if ((a<=b) && (c<=d))示例2-3 代码行内的空格2.4 对齐●【规则2-4-1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。

●【规则2-4-2】{ }之内的代码块在‘{’右边数格处左对齐。

示例2-4(a)为风格良好的对齐,示例2-4(b)为风格不良的对齐。

示例2-4(a) 风格良好的对齐示例2-4(b) 风格不良的对齐对齐可以采用选择待对齐行后Alt+F8的方式。

2.5 长行拆分●【规则2-5-1】代码行最大长度宜控制在70至80个字符以内。

代码行不要过长,否则眼睛看不过来,也不便于打印。

●【规则2-5-2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。

拆分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例2-5 长行的拆分2.6 注释C语言的注释符为“/*…*/”。

C++语言中,程序块的注释常采用“/*…*/”,行注释一般采用“//…”。

注释通常用于:(1)版本、版权声明;(2)函数接口说明;(3)重要的代码行或段落提示。

虽然注释有助于理解代码,但注意不可过多地使用注释。

参见示例2-6。

●【规则2-6-1】注释是对代码的“提示”,而不是文档。

程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。

注释的花样要少。

●【规则2-6-2】如果代码本来就是清楚的,则不必加注释。

否则多此一举,令人厌烦。

例如i++; // i 加 1,多余的注释●【规则2-6-3】边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。

不再有用的注释要删除。

●【规则2-6-4】注释应当准确、易懂,防止注释有二义性。

错误的注释不但无益反而有害。

●【规则2-6-5】尽量避免在注释中使用缩写,特别是不常用缩写。

●【规则2-6-6】注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。

●【规则2-6-7】当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。

2.7 匈牙利命名规范匈牙利命名法的出发点是把变量名按:属性+类型+对象描述的顺序组合起来,以使程序员作变量时对变量的类型和其它属性有直观的了解。

如命名一个全局目的文件指针:FILE* g_pDstFile;第二篇常见问题应对一、无法设置断点问题描述:按F9无法设置断点问题原因:1.工程设置没有加入调试信息2.DLL没被成功调用3.打开的cpp文件与被调用的DLL版本不匹配(路径不对,两份代码)解决办法:1. 确认工程是否加入调试信息:●在WorkSpace中右键点击工程●Settings->C/C++选项卡复选Generate browe info●Settings->Link选项卡复选Generate debug info和Link incrementally●确认,右键clean工程,然后再Build2. 确认SignallProcessor.exe工程是否正确配置运行参数,检查Settings->Debug选项卡,Program argument是否填写“-c”(读取配置文件的意思,可查看SignallProcessor的头文件了解)在exe入口函数,如SignallProcessor工程的main函数中的while循环处设置断点,然后右键调出OutPut窗口,观察是否成功调用本DLL。

如果没有,查看Decoder.conf或Ana.conf 文件是否配置正确.3. 右键点击工程Clean掉DLL,再调试,在exe入口函数设置断点查看OutPut窗口,如果调用了DLL,说明DLL生成路径与SignallProcessor.exe不同,欲设置断点的cpp对应的DLL 与SignallProcessor.exe调用的DLL不匹配。

所以需要设置该工程的DLL输出路径到SignallProcessor.exe的路径,或者生成后拷贝DLL到SignallProcessor.exe的路径。

二、断点设置错位问题描述:在A行设置断点,断点总是出现在A+n行问题原因:cpp文件与被调用的DLL版本不匹配(路径对,但做了修改)解决办法:cpp对应工程生成的是LIB(BaseDecoder):●右键点击工程Clean,需要Clean掉解码器DLL和基础解码LIB;●编译解码器DLL,如果路径正确,则应该会报错找不到基础解码LIB,如果没报错,则要找出链接到哪个LIB,并且排除错误。

(报错才对,没报错反而不对,这是验证路径的技巧)●编译基础解码工程(一定先确认没编译基础解码则解码器编译通不过)●编译解码器工程cpp对应工程生成的是DLL(Decoder):●右键点击工程Clean掉解码器DLL;●编译解码器工程三、调试不到断点问题描述:成功设置断点后F5执行程序,始终不能在断点处终止问题原因:1.在本段代码运行完后才设置断点,错过时机2.在本段代码之前进入死循环3.代码前就有return语句解决办法:1. 如Register函数只运行一次,而且不方便设置断点,需要借助CYDD_ASSERT(false)报出断言,然后再进行调试2. 检查新写代码逻辑,是否会陷入死循环3. 如果代码前被错误的用了return,则删除;如果是有效性判断中被return,则查看错误原因,也许是被送去的参数就不合法。

四、出现断言错误问题描述:程序运行一段时间后,出现了断言错误。

问题原因:1.统计程序中所使用的字段,在解码器中没有注册成功,注意检查。

2.程序中所需要的dll在Decord.conf中的调用的dll未写。

3.protocolenum.ini的文件读配置文件四.非法打开文件的问题描述:程序运行一段时间后,弹出错误打开文件的对话框。

问题原因:1.fopen程序出现了两次。

四、无法出表问题描述:成功设置断点后F5执行程序,不能进入解码器问题原因:1、decorder.Conf的设置没有相应dll。

Protocolenum.ini是读配置文件的断言出现fclose。

C错误,stream!=full 进行调试,在断言的前面设置断点,一定有写错误。

导致关闭空。

初始化断言错误看看protocolenum 是不是没有写第三篇版本管理工具SVN一、提交的文件类型一般为.def、.cpp、.h、.dsp等非临时性文件,dsp文件不要轻易上传(没有修改工程设置,只添加了cpp或者头文件时可以上传)二、提交原则1.自己负责自己的代码,不要提交他人的代码,对他人的代码有修改需要上传时,应当通知该代码负责人,让他本人修改后提交2.提交前先update更新,达到与服务器版本一致3.在本机编译通过,调试正确的代码才能上传4.当发生冲突时(黄色感叹号),或上传失败时,使用SVN的TorToiseSVN->diff功能,找出原因并改正。