Vc2005使用心得

 Vc2005出来有一段时间了.其特性确实与之前的版本有些差异.同样的程序在2005下就可能有问题.以下是发现的一些问题:

(1)对于conststatic类型的常量或变量,在声明时需要指定适当的数据类型,如果不指定不再提供默认类型

(2)  在使用使用std命名空间库函数的时候,会出现如下的警告,

warning C4996: strcpy was declared deprecated
 
这是因为Vs2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。 在编译选项中增加宏_CRT_SECURE_NO_DEPRECATE可以忽略这些警告,但是Vs2005提供了这些函数的更高级别安全版本,后面加了一个_s的函数,如strcpy_s等,建议使用TCHAR,及相关的字符串拷贝函数,如:_tcscpy_s_stprintf_s2005下加后面的_s)等
(3)vc2005中,time_t32位变成64位。在将一个非time_t数据赋值给一个time_t时,请将非time_t数据转换为time_t,然后再赋值;将time_t转换为整形数据时,请选用LONGLONG
(4)  对于const和非const常量的转换时,根据具体情况确定,推荐将两者转换为const类型
(5)提示:
C:/program files/microsoft visual studio 8/vc/include/xiosbase(104) : error C2065: '_SH_DENYNO' : undeclared identifier
.原因是xiosbase文件中包含的头文件share.h与工程文件中的文件重名,导致xiobase加载的是工程文件中share.h,解决方法是修改工程中的share文件名
(6)标准库的C++头文件名中的.h被去掉,如<iostream.h>变成了<iostream>,对于 C头文件,采用同样的方法,但在每个名字前要添加一个 c,如<string.h>变成了<cstring>。 

(7)如果找不到MFC的头文件,将在VS2005安装目录下搜索该文件,找到后将路径添加到TOOL->Options…->Projects and Solutions->VC++ directories

(8)在编译资源的时候,如果编译器报告:资源中的ID号与系统ID冲突(至少从6.02005转换,发现有),请修改相应的资源ID号。

(9)  将无符号数据转换为数据范围更大的有符号数据时,请人工将无符号数据转换为有符号数据,不要让系统默认处理.

   Unsigned int b = 10;
_int64 a = (int)b;
 
如文件操作:使用CFile::Seek函数,
在VC6中函数形式为:LONG Seek( LONG lOff, UINT nFrom );
在VC8中为LONGLONG Seek( LONGLONG lOff, UINT nFrom );
代码中有些地方是这样使用的Seek(--sizeof(xxxx) , CFile::current);
Sizeof的返回是一个unsigned int,如上使用会发生比较严重的问题:lOff的高4个字节不会转换为有符号数据,类似0x00000000xxxxxxxx,正确的形式为:0xffffffffxxxxxxxx
请在sizeof前面使用强制转换:(int)sizeof或先将其转换为__int64,然后在进行其他处理
(10)对于MFC函数或C运行时库函数,在VS2005中可能发生变化,请根据MSDN选择合适的函数形式
展开阅读全文

没有更多推荐了,返回首页