2024年4月6日发(作者:)

《Visual C++ 2010入门教程》系列四:VC2010中初学者常见错误、警告和问题

2010年06月27日 星期日 上午 11:21

这一章将帮助大家解释一些常见的错误、警告和问题,帮助大家去理

解和解决一些常见问题,并了解它的根本原因。

iostream.h与

下面的代码为什么在VC2010下面编译不过去?

#include

int main()

{

cout<<"Hello World."<

return 0;

}

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

No such file or directory

造成这个错误的原因在于历史原因,在过去C++98标准尚未订立的时

候,C++的标准输入输出流确实是定义在这个文件里面的,这是C风格的定义方

法,随着C++98标准的确定,iostream.h已经被取消,至少在VC2010下面是这

样的,取而代之的是我们要用头文件来代替,你甚至可以认为

是这样定义的:

namespace std

{

#include "iostream.h"

}

因此我们可以简单的修改我们的Hello World。

#include

using namespace std;

int main()

{

cout<<"Hello World."<

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, "Hello World!" );

cout<< sz << endl;

return 0;

}

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

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, "Hello World!" );

cout<< sz << endl;