两个 Visual Studio 2008 SP1 问题
文章目录
Visual C++ 2008 SP1 compiler error C1859
有一些工程,在编译好后再重新编译,会提示类似如下错误(Windows7下容易出现):
<pre class="example">Error 1 fatal error C1859: 'release\\testproject.pch' unexpected precompiled header error, simply rerunning the compiler might fix this problem
<p>
这个就是 Visual C++ 2008 SP1 compiler error C1859 的问题,解决办法就是安装一个<a href="http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=25785">补丁包</a>。
</p>
<p>
除了安装上述安装包以后,还可以使用<a href="http://blogs.msdn.com/b/vcblog/archive/2009/11/12/visual-c-precompiled-header-errors-on-windows-7.aspx">如下方式</a>来修复该问题:
</p>
<ul>
<li>
Disable /analyze (if enabled).
</li>
<li>
Invoke a clean build.
</li>
<li>
Reboot your machine.
</li>
<li>
Disable PCH files.
</li>
</ul>
使用 std::copy 时的 C4996 警告
Visual C++ 2008 里如果把警告当成错误处理时进行编译,下面这个警告就会被当成错误,很扎眼,而你,则一定需要解决这个问题。
<pre class="example">Warning 2 warning C4996: 'std::copy': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
<p>
这是在使用 Visual C++ 自带的标准库时,Visual C++ 的编译器会加强检查,<a href="http://msdn.microsoft.com/en-us/library/aa985872.aspx">标准库里的一些方法会认为在使用上是不安全的</a>。Visual C++ 对此提出警告、不建议使用这些函数,并且 Windows 提供了一些其它以 _s 结尾的函数用来替代这些方法。std::copy 就是这个现象的重灾区。
</p>
<p>
如果是你自己的代码碰到这个问题,那很好解决,你只需要把这些函数替换成 Windows 提供的更安全的函数即可。但是,如果是你引用的第三方库的代码问题,而你又在 Visual Studio 里把安全级别设置成不允许有警告,这个时候,就只能通过定义一个 _SCL_SECURE_NO_WARNINGS 宏来解决此问题。
</p>
文章作者 cookwhy
上次更新 2014-08-20