首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > VSTS >

VS2008 编译 链接器异常以及使用C语言函数的警告

2013-01-25 
VS2008 编译 链接器错误以及使用C语言函数的警告在使用VS做项目的时候,在VS2005的版本开始,经常会出现两类

VS2008 编译 链接器错误以及使用C语言函数的警告

在使用VS做项目的时候,在VS2005的版本开始,经常会出现两类错误,一个是在编译的时候,连接器经常死掉,无法成功编译,另外一个是使用了C语言函数后,会发出警告。

下面分别来说说这两个问题的解决方案。


一,链接器无法正常工作的解决方法:

在使用VS开发,进行编译时,往往在语法没有错误的情况下,依然会频繁的出现链接失败,通常情况下,再build一次就好了。这个问题往往是由于增量链接导致的,可以在项目的属性中,进行配置,不进行增量链接,就可以解决这个问题了。具体步骤是,project->Properties->Linker->Enable Incremental Linking设置为No(/Incremental:NO)即可。中文版的是工程->属性->链接->增量链接,设置为NO。默认情况下,这个设置是YES,当设置为NO时,链接器无法正常工作的问题往往都能解决了。


二、使用C语言函数报警告的解决方法:

在开发过程中,若使用了某些C语言函数,可能会遇到很多警告,如

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.
1>          c:\program files\microsoft visual studio 10.0\vc\include\string.h(105) : 参见“strcpy”的声明
warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234) : 参见“fopen”的声明
等等诸如此类的警告,这些警告,主要因为那些C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数你不用专门去记忆,因为编译器对于每个函数在给出警告时,都会告诉你相应的安全函数,查看警告信息就可以获知,在使用时也再查看一下MSDN详细了解。
    解决方案:
1> 根据下面的warning提示:参见“fopen”的声明
        消息:“This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”
        所以可以将函数按warning提示的第二句,改为使用fopen_s函数即可:
        例如:FILE *pFile=fopen("1.txt", "w");
           改为:
           FILE* pFile;
           fopen_s(&pFile, "1.txt", "w");
2> 还是根据warning提示的地三句话:use _CRT_SECURE_NO_DEPRECATE
        项目|属性|配置属性|C/C++|命令行|附加选项,加入(/D "_CRT_SECURE_NO_DEPRECATE" )(注:加入中括号中完整的内容)
3> 降低警告级别:项目|属性|配置属性|C/C++|常规,自己根据情况降低警告级别(此法不推荐)
    注意:高度重视警告:使用编译器的最高警告级别。应该要求构建是干净利落的(没有警告)。理解所有警告。通过修改代码而不是降低警告级别来排除警告。
    编译器是你的朋友。如果它对某个构造发出警告,这经常是说明你的代码中存在潜在的问题。

热点排行