VC6常见问题.docx
- 文档编号:25955330
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:12
- 大小:21.74KB
VC6常见问题.docx
《VC6常见问题.docx》由会员分享,可在线阅读,更多相关《VC6常见问题.docx(12页珍藏版)》请在冰豆网上搜索。
VC6常见问题
版本历史
版本/状态
作者
参与者
起止日期
备注
V1.0
胡锡哲
2010.04.13~
2008.04.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)
//空行
voidFunction1(…)
{
…
}
//空行
voidFunction2(…)
{
…
}
//空行
voidFunction3(…)
{
…
}
//空行
while(condition)
{
statement1;
//空行
if(condition)
{
statement2;
}
else
{
statement3;
}
//空行
statement4;
}
示例2-1(a)函数之间的空行示例2-1(b)函数内部的空行
2.2代码行
●【规则2-2-1】一行代码只做一件事情,如只定义一个变量,或只写一条语句。
这样的代码容易阅读,并且方便于写注释。
●【规则2-2-2】if、for、while、do等语句自占一行,执行语句不得紧跟其后。
不论执行语句有多少都要加{}。
这样可以防止书写失误。
示例2-2(a)为风格良好的代码行,示例2-2(b)为风格不良的代码行。
intwidth;//宽度
intheight;//高度
intdepth;//深度
intwidth,height,depth;//宽度高度深度
x=a+b;
y=c+d;
z=e+f;
X=a+b;y=c+d;z=e+f;
if(width { dosomething(); } if(width for(initialization;condition;update) { dosomething(); } //空行 other(); for(initialization;condition;update) dosomething(); other(); 示例2-2(a)风格良好的代码行示例2-2(b)风格不良的代码行 ✧【建议2-2-1】尽可能在定义变量的同时初始化该变量(就近原则) 如果变量的引用处和其定义处相隔比较远,变量的初始化很容易被忘记。 如果引用了未被初始化的变量,可能会导致程序错误。 本建议可以减少隐患。 例如 intwidth=10;//定义并初绐化width intheight=10;//定义并初绐化height intdepth=10;//定义并初绐化depth 2.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)) voidFunc1(intx,inty,intz);//良好的风格 voidFunc1(intx,inty,intz);//不良的风格 if(year>=2000)//良好的风格 if(year>=2000)//不良的风格 if((a>=b)&&(c<=d))//良好的风格 if(a>=b&&c<=d)//不良的风格 for(i=0;i<10;i++)//良好的风格 for(i=0;i<10;i++)//不良的风格 for(i=0;I<10;i++)//过多的空格 x=a a: b;//良好的风格 x=a a: b;//不好的风格 int*x=&y;//良好的风格 int*x=&y;//不良的风格 array[5]=0;//不要写成array[5]=0; a.Function();//不要写成a.Function(); b->Function();//不要写成b->Function(); 示例2-3代码行内的空格 2.4对齐 ●【规则2-4-1】程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。 ●【规则2-4-2】{}之内的代码块在‘{’右边数格处左对齐。 示例2-4(a)为风格良好的对齐,示例2-4(b)为风格不良的对齐。 voidFunction(intx) { …//programcode } voidFunction(intx){ …//programcode } if(condition) { …//programcode } else { …//programcode } if(condition){ …//programcode } else{ …//programcode } for(initialization;condition;update) { …//programcode } for(initialization;condition;update){ …//programcode } While(condition) { …//programcode } while(condition){ …//programcode } 如果出现嵌套的{},则使用缩进对齐,如: { … { … } … } 示例2-4(a)风格良好的对齐示例2-4(b)风格不良的对齐 对齐可以采用选择待对齐行后Alt+F8的方式。 2.5长行拆分 ●【规则2-5-1】代码行最大长度宜控制在70至80个字符以内。 代码行不要过长,否则眼睛看不过来,也不便于打印。 ●【规则2-5-2】长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。 拆分出的新行要进行适当的缩进,使排版整齐,语句可读。 if((very_longer_variable1>=very_longer_variable12) &&(very_longer_variable3<=very_longer_variable14) &&(very_longer_variable5<=very_longer_variable16)) { dosomething(); } virtualCMatrixCMultiplyMatrix(CMatrixleftMatrix, CMatrixrightMatrix); for(very_longer_initialization; very_longer_condition; very_longer_update) { dosomething(); } 示例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匈牙利命名规范 匈牙利命名法的出发点是把变量名按: 属性+类型+对象描述的顺序组合起来,以使程序员作变量时对变量的类型和其它属性有直观的了解。 属性部分 类型部分 描述部分 全局 变量 g_ 指针 p 长整型 l 无效 v 最大 Max 函数 fn 短整型 n 句柄 h 最小 Min 类成员变量 m_ 实型 r 布尔 b 计数 c(cnt) 初始化 Init 字 w 双字 dw 字符 ch(c) 临时 变量 T(Temp) 静态 变量 s_ 无符号 u 字符串 sz 整型 i(n) 源对象 Src 双精度 浮点 d 浮点型 (或文件) f 字节 by 目的 对象 Dst 如命名一个全局目的文件指针: FILE*g_pDstFile; 第二篇常见问题应对 一、无法设置断点 问题描述: 按F9无法设置断点 问题原因: 1.工程设置没有加入调试信息 2.DLL没被成功调用 3.打开的cpp文件与被调用的DLL版本不匹配(路径不对,两份代码) 解决办法: 1.确认工程是否加入调试信息: ●在WorkSpace中右键点击工程 ●Settings->C/C++选项卡复选Generatebroweinfo ●Settings->Link选项卡复选Generatedebuginfo和Linkincrementally ●确认,右键clean工程,然后再Build 2.确认SignallProcessor.exe工程是否正确配置运行参数,检查Settings->Debug选项卡,Programargument是否填写“-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功能,找出原因并改正
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC6 常见问题