如果在vc10/11工程的rc文件中有以下任意一行代码:

#include <winuser.h>
#include <richedit.h>

那么vc将会给出一对警告:

C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string.h(54): warning RC4011: identifier truncated to '_CRT_SECURE_CPP_OVERLOAD_STANDA'
C:\Program Files\Microsoft Visual Studio 10.0\VC\include\string.h(76): warning RC4011: identifier truncated to '_CRT_SECURE_CPP_OVERLOAD_SECURE'

其原因是vc提供了一个宏_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY,用来自动将代码中的memcpy替换成memcpy_s。
memcpy_s在被提出时,确实感觉这样子代码是安全了,但是两个函数的参数不一致,导致修改量上去了,而且移植性也没有了,于是vc好心地提供这个宏用来自动替换。
那么为什么会有上面的警告呢?

问题出在RC,也就是resource compiler,基于历史原因,它会自动将长度超过31的宏截断,应该是RC只用了char[32]来存诸的缘故,于是我们就看到让人不舒服的警告了。

解决办法很简单:

针对#include <winuser.h>,将其替换为<windows.h>。

针对#include <richedit.h>,稍微麻烦一点。
据我们所知,rc包含.h的目的通常只是为了一些#define,对其中的函数神马的并不在意。
那么如警告中描述所示,问题是出在string.h,同时我们包含richedit其实也只是为了得到RICHEDIT_CLASS,那么事情好办了,修改如下:

#ifdef RC_INVOKED
#define _INC_STRING
#endif #include <windows.h>
#include <commctrl.h>
#include <richedit.h>
#include "resource.h"

如MSDN中所描述:

To conditionally compile your code with the RC compiler, surround code that RC cannot compile with #ifndef RC_INVOKED and #endif.

而string.h中是这样定义的:

#pragma once

#ifndef _INC_STRING
#define _INC_STRING ... #endif

好的,你懂的,我就不多说什么了。

:D

解决Visual Studio 2010/2012的RC4011 warnings的更多相关文章

  1. 解决Visual Studio 2010/2012在调试时lock文件的方法

    调试3dsmax插件,有一个避免每次修改插件代码都需要重启3dsmax的方法,就是将导出的核心代码写在一个独立的DLL中,然后在插件代码需要导出时LoadLibrary这个DLL,导出之后再FreeL ...

  2. 在Visual Studio 2010/2012中 找不到创建WebService的项目模板

    参考文章: http://blog.sina.com.cn/s/blog_6d545999010152wb.html 在 Visual Studio 2010 或者2012的新建 Web 应用程序或者 ...

  3. 解决Visual Studio 2010 “无法导入以下密钥文件” 错误

    错误原文: "错误 1 无法导入以下密钥文件: SamplePlugin.pfx.该密钥文件可能受密码保护.若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 ...

  4. 更改Visual Studio 2010/2012/2008的主题设置

    一.更改主题: 主题网站:http://studiostyl.es/ Visual Studio 2010发布也已经有一段时间了,不过安装后默认的白底的主题长时间看代码可能会感觉眼睛酸痛,况且时间长了 ...

  5. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

    VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误.   解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

  6. 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误

      VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误. 解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...

  7. [转发]在Visual Studio 2010/2012/2013/2015上使用C#开发Android/IOS安装包和操作步骤

    官方学习文档:http://developer.xamarin.com/guides/android/getting_started/ 官方学习例子:http://developer.xamarin. ...

  8. 解决Visual Studio 2010闪退问题

    许多人都会面临这样的问题,vs2010闪退,明明程序执行成功,明明没有错误,缺闪了一下结束. 闪退问题主要是缓存的问题,通过在程序末尾,即main函数后增加 getchar(); getchar(); ...

  9. How To Compile Qt with Visual Studio 2010

    This post is a step-by-step guide on how to compile Qt 4.x.x with MSVC 2010. Although we use Qt 4.7. ...

随机推荐

  1. [Shell]Bash变量:变量测试与内容替换

    --------------------------------------------------------------------------------------------- 变量测试是通 ...

  2. 第六次课:springMVC与spring的集成

    spring在项目中起到了管理bean的作用,即可以通过配置,让系统自动创建所需的对象,通过一定的方式引用系统创建的对象,对象的创建和引用都是由spring自动完成的,用户不必参与,可以直接引用. 实 ...

  3. python中xrange和range的异同

    本文章系转载,原文来源不详. range    函数说明:range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列.range示 ...

  4. JS JQuery初始化

    (function($) {})(jQuery); 这种写法,申明一个匿名函数并立即调用 $(document).ready(function(){}); 文档全部加载完再执行 等同于$(functi ...

  5. delphi 处理图片(剪切,压缩)

    剪切bmp:效果为指定的rect大小,若图片比rect小,则会放大. 都要uses Vcl.Imaging.jpeg; 需要注意的是FMX里也需要jpeg的支持,虽然没引用编译器不会报错,但用到jpg ...

  6. eclipse部署上Tomcat后的clean和publish功能

    publish:是将你的web程序发布到tomcat服务器上,这样通过浏览器就可以访问你的程序.clean:是指原先编译到tomcat服务器上的程序,先清除掉,然后再重新编译. publish的作用就 ...

  7. 利用dbms_metadata.get_ddl查看DDL语句

    http://www.cnblogs.com/aocle/archive/2011/10/13/2209790.html 当我们想要查看某个表或者是表空间的DDL的时候,可以利用dbms_metada ...

  8. 重新延时运行的Js 实现

    场景 1. AutoComplete 插件, 当用户的输入空闲0.5s 时,才向服务发送请求.而不是用户输入每一个字符都要请求服务器. 2. 图片懒加载时,用户拖动滚动条空闲0.5s时,才遍历懒加载的 ...

  9. 微软BI 之SSIS 系列 - Precedence Constraint 详解优先约束的使用

    开篇介绍 Precedence Constraint 优先约束 - 在控制流中使用,用来链接控制流中各种 Task,Container,并且要求满足一定的条件才能执行相关联的 Task 或者 Cont ...

  10. C++数组和指针

    <C++ Primer 4th>读书摘要 与 vector 类型相似,数组也可以保存某种类型的一组对象:而它们的区别在于,数组的长度是固定的.数组一经创建,就不允许添加新的元素.指针则可以 ...