入门玩转VC++2010 - 图文 下载本文

今天的内容就是这些,希望对大家有帮助。请大家务必好好学习C++教材,并使用VC2010好好演练,最好能够举一反三自己创造问题自己解决!多看看百度知道C/C++下面的那些问题,每解决一个那样的问题,你自己也会进步。

第四章VC2010中初学者常见错误、警告和问题

这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理解和解决一些常见问题,并了解它的根本原因。 iostream.h

下面的代码为什么在VC2010下面编译不过去? #include int main() {

cout<<\

return 0; }

错误信息:fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory

造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这样的,取而代之的是我们要用头文件来代替,你甚至可以认为是这样定义的: namespace std {

#include \ }

17

因此我们可以简单的修改我们的Hello World。 #include using namespace std; int main() {

cout<<\

return 0; }

iostream.h是属于C++的头文件,而非C的,因此标准订立的时候被改成了。而C的头文件stdio.h等依然可以继续使用,这是为了兼容C代码。但是它们依然有对应的C++版本,如 等。记住,在VC2010上面采用C++风格的头文件而不是C风格的头文件,除非你是在用C。

warning C4996

这是一个警告,请看下面的代码: #include using namespace std; int main() {

char sz[128] = {0};

strcpy( sz, \cout<< sz << endl; return 0; }

上面的strcpy会产生这个警告:

18

warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

这是因为VC从2005版本开始,微软引入了一系列的安全加强的函数来增强CRT(C运行时),这里对应的是strcpy_s。_s意为safe的意思,同样的道理,strcat也是同样。因此要解决这个问题,我们可以用strcpy_s来替换strcpy,但是注意strcpy_s并非所有编译器都提供,因此如果要跨编译器,请采用错误信息中所提示的方式,定义_CRT_SECURE_NO_WARNINGS宏来掩耳盗铃吧。另外注意并非所有的加强函数都是在屁股后面加_s,比如stricmp这个字符串比较函数的增强版名字是_stricmp。下面,用strcpy_s来更改程序: int main() {

char sz[128] = {0};

strcpy_s( sz, \cout<< sz << endl;

char* pSz2 = new char[128]; strcpy_s( pSz2, 128, \cout<< pSz2 << endl; delete pSz2; return 0; }

注意,strcpy_s有两个版本,一个可以帮助我们自动推断缓冲区的大小,而另外一个不能帮助我们推断,因此在编译器不能推断缓冲区大小的时候,我们需要自己指定缓冲区的大小,如上面的程序所演示的那样,关于增强版的函数请参考我写的《深入学习C++ String2.1版》。 TCHAR、wchar_t、char 请大家看下面这个程序: #include #include

19

#include using namespace std;

int main() {

MessageBox( NULL, \你好HelloWorld!\return 0; }

貌似没什么问题吧?错了,如果你是按照我教你的方法创建的控制台空工程的话,那么会有编译错误: error C2664: “MessageBoxW”: 不能将参数 2 从“const char [17]”转换为“LPCWSTR”

这个问题太普遍了,几乎所有的初学者都会遇到而且感到难以应付,因为按照提示使用(LPCWSTR)强制转型貌似并不能帮助我们解决问题,而且这个程序在VC6下面应该是没有任何问题的,那问题出现在哪里呢?问题在这里,请右键单击解决方案浏览器下面的项目,属性,

20