之前的工作中遇到的一些问题、小知识或者需要注意的地方,本来是记在小本本上的,发现还是放在网上方便一些,可以随时看到。所以转移到博客里来,算是记录一下自己的学习轨迹,同时自己也再记一遍,当然能帮到别人也说不定。
所以就大杂烩地写进来吧,内容也挺多,分成两个写。
1. VC中的大小写(BOOL/bool、TRUE/true、FALSE/false等)的区别
(1)bool是ANSI C中的基本类型之一,true和false是ANSI C中对布尔值的定义,即true和false都是bool型的值。
BOOL、TRUE、FALSE都是VC++中自定义的宏(TRUE、FALSE是BOOL的值)。
<span style="font-size:18px;"> typedef int BOOL
#define TRUE 1
#define FALSE 0</span>
(2)小布尔类型占用1字节,都是保留字;大布尔占用四字节,实际上都是整型。
(3)小布尔在任何支持ANSI C 的编译器上都是适用的;而大布尔只在VC的编译器中或者定义了大布尔的编译器中才能使用(BOOL只能用于MFC环境)。
(4)BOOL类型要比bool类型处理快一些,因为BOOL类型正好等于一个机器处理的最大字长,bool处理过程需要一些转换。
2. 错误:unrecognized character escape sequence
在函数添加地址类字符串(如”E:\**.**“)时出现此warning。
解决:(1)在C++中,”\“是作为转义字符存在的,如\n,\t等,想要输出”\“字符需要在”\“前面再加一个转义字符”\“,即改为”E:\\**.**“;
(2)可能使用了全角输入,要使用正统的英文才行。
3. 错误:-858993460
原因:返回-858993460说明返回了不确定的随机结果。
4. COleVariant介绍
COleVariant类是对VARIANT结构的封装。它的构造函数具有极为强大的功能。当对象构造时,先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被清除。除此之外,COleVariant的赋值操作符在与VARIANT类型转换中为我们提供了很大的方便。
5. 错误:syntax error: missing ';' before identifier '**'
原因:(1)确实是语法问题,缺少分号;
(2)可能是#include头文件顺序有问题;
(3)可能是函数缺少花括号’}‘;
(4)可能是其它错误。
6. #ifdef _DEBUG用法小结
<span style="font-size:18px;">#ifdef _DEBUG
vitual void AssertValid() const;
vitual void Dump(CDumpContext& dc) const;//存储上下文
#endif
</span>
<span style="font-size:18px;">这两个函数是调试用的,第一个函数检查可用性,即是否有效;第二个函数如果未更改的话,最终调用的是CWnd::Dump();输出窗口类名、标题名等一系列信息(在输出窗口中)。</span></span>
<span style="font-size:18px;">#ifdef _DEBUG
#endif
</span>
这是条件编译,即如果有#define _DEBUG这两个函数会编译,否则忽略;当你用debug生成时,开发环境则自动加上这个宏定义,这两个函数有效。
<span style="font-size:18px;">#ifdef _DEBUG //判断是否定义_DEBUG
#undef THIS_FILE //取消THIS_FILE的定义
static char THIS_FILE[] = __FILE__;//定义THIS_FILE指向文件名
#define new DEBUG_NEW //定义调试new宏,取代new关键字
#endif //结束</span>
如果定义了_DEBUG,表示在调试状态下编译,因此相应修改了两个符号的定义;THIS_FILE是一个char数组全局变量,字符串值为当前文件的全路径,这样在Debug版本中当程序出错时出错处理可用这个变量告诉你是哪一个文件中的代码有问题;定义_DEBUG后,由于定义了_DEBUG,编译器确定这是一个调试,编译#ifdef _DEBUG和#endif之间的代码;#undef表示清除当前定义的宏,使得THIS_FILE无定义;__FILE__是编译器能识别的事先定义的ANSI C的六个宏之一;#define new DEBUG_NEW,DEBUG_NEW定位内存泄露并跟踪文件名。
7. 错误:CreateDispatch不能运行
VC调用WPS类库全部写好之后,再用测试程序进行测试时,m_App.CreateDispatch()不能执行或执行出错,原因在于没有在对话框中对调用进行初始化。
解决:为对话框创建OnInitDialog函数,在函数中添加一句AfxOleInit(); ,表示该对话框应用OLE时的初始化。
8. 错误:LINK: fatal error LNK1104: cannot open file "**.exe"
解决:(1)如果.exe开着,把它关掉;
(2)去任务管理器结束.exe进程;
(3)以上无效,99.9%说明电脑装了杀毒软件,关掉。
9.错误:User breakpoint called from code at 0x7c92120e
原因:出现这种调试错误,一般是重复释放,如:
int *p = new int;
delete p;
delete p;
<span style="font-family:Microsoft YaHei; font-size:18px; background-color:rgb(240,240,240)"> 解决:没有找到解决方案。。。。。。</span>