Microsoft C/C++ 编译器警告 C4800 - C4999

本部分列出的文章描述了 Microsoft C/C++ 编译器警告消息 C4800-C4999。

重要

Visual Studio 编译器和生成工具可报告多种类型的错误和警告。 发现错误或警告后,生成工具可做出有关代码意向的假设并尝试继续,因此,可能会同时报告更多问题。 如果工具做出错误假设,则后续错误或警告可能不适于你的项目。 纠正项目中的问题时,请始终先纠正报告的第一个错误或警告,然后在通常情况下重新生成。 一个修补程序可能会使许多后续错误消失。

若要在 Visual Studio 中获取有关特定诊断消息的帮助内容,请在“输出”窗口中选择该消息,然后按 F1 键。 Visual Studio 会打开该错误的文档页(如果存在)。 还可以使用页面顶部的搜索工具查找有关特定错误或警告的文章。 或者,按工具浏览错误和警告列表,并在此页面上的内容列表中键入内容。

注意

并非所有 Visual Studio 错误或警告均有记录。 在许多情况下,诊断消息将提供所有可用信息。 如果在使用 F1 时登陆此页,并且认为错误或警告消息需要额外的解释,请告诉我们。 可以使用此页面上的反馈按钮在 GitHub 上提出文档问题。 如果认为错误或警告是错误的,或者发现了工具集的其他问题,请在开发者社区网站上报告产品问题。 还可以在 IDE 中发送反馈并输入 bug。 在 Visual Studio 中,转到菜单栏并选择“帮助”>“发送反馈”>“报告问题”,或者使用“帮助”>“发送反馈”>“发送建议”提交建议。 创建了一些编译程序错误主题,这些主题不是由编译程序发出的,但现在会重定向到此页面。

可以在 Microsoft Learn Q&A 论坛上查找有关错误和警告的其他帮助。 或者,在 Visual Studio C++ 开发者社区网站上搜索错误或警告编号。 还可以搜索 Stack Overflow 以查找解决方案。

有关指向其他帮助和社区资源的链接,请参阅 Visual C++ 帮助和社区

警告消息

警告 消息
编译器警告(等级 4,关闭)C4800 从“type”隐式转换为“bool。 可能的信息丢失
编译器警告 C4801 通过引用返回是不可验证的:消息
编译器警告(级别 1)C4803 “method”:引发方法的存储类与事件“event”的存储类不同
编译器警告(级别 1)C4804 “operation”:在操作中使用类型“bool”不安全
编译器警告(等级 1)C4805 “operation”:在操作中将类型“type1”与类型“type2”混合不安全
编译器警告(等级 1)C4806 “operation”:不安全操作:从类型“type1”提升到类型“type2”的值不能等于给定的常量
编译器警告(级别 1)C4807 “operation”:将类型“type1”与类型“type2”的有符号位域混合不安全
编译器警告(等级 1)C4808 case“value”不是类型“bool”的 switch 条件的有效值
编译器警告(等级 1)C4809 switch 语句有多余的“default”标签;给定所有可能的“case”标签
编译器警告(等级 1)C4810 pragma pack(show) 的值 == n
编译器警告(等级 1)C4811 pragma conform(forScope, show) 的值 == value
编译器警告(级别 1)C4812 过时的声明样式:请改用“new_syntax”
编译器警告(级别 1)C4813 “function”:局部类的友元函数以前必须之前已经声明
编译器警告(级别 4)C4815 object name”:堆栈对象中零大小的数组不会有元素(除非该对象是进行了聚合初始化的聚合)
编译器警告(级别 4)C4816 “param”:参数具有一个大小为零的数组,该数组将被截断(除非该对象通过引用传递)
编译器警告(等级 1)C4817 “member”:非法使用“.”访问该成员;编译器已将其替换为“->”
编译器警告(等级 1)C4819 该文件包含不能在当前代码页(数字)中表示的字符。 以 Unicode 格式保存该文件防止数据丢失
编译器警告(等级 4,关闭)C4820 “member_name”构造后添加了“bytes”字节填充
编译器警告(级别 1)C4821 无法确定 Unicode 编码类型,请用签名 (BOM) 保存文件
编译器警告(等级 1,关闭)C4822 “member function”:局部类成员函数没有函数体
编译器警告(等级 3)C4823 “function”:使用固定指针,但未启用展开语义。 请考虑使用 /EHa
编译器警告(等级 2,关闭)C4826 从“type1”到“type2”的转换是带符号的扩展转换。 这可能导致意外的运行时行为。
编译器警告(等级 3)C4827 不带参数的公共“ToString”方法应标记为 virtualoverride
编译器警告(级别 1)C4828 文件包含从偏移 0xHexOffset 开始的字符,该字符在当前源字符集中无效(代码页 codepage)。
编译器警告(级别 1)C4829 函数 main 的参数可能不正确。 请考虑使用“int main(Platform::Array<Platform::String^>^ argv)
编译器警告(等级 1)C4834 放弃具有“nodiscard”属性的函数的返回值
编译器警告(级别 1)C4835 “variable”:在主机程序集中首次执行托管代码之后,才能运行导出数据的初始值设定项
编译器警告(等级 4,关闭)C4837 检测到三元组:“??character”已替换为“character”
编译器警告(级别 1)C4838 从“type_1”转换为“type_2”需要收缩转换
编译器警告(级别 3)C4839 将类“type”作为可变参数函数的参数的用法不规范
编译器警告(级别 4)C4840 将类“type”作为可变参数函数的参数的用法不可移植
编译器警告(等级 4,关闭)C4841 使用的非标准扩展:offsetof 中使用的复合成员指示符
编译器警告(等级 4,关闭)C4842 offsetof”应用于使用多重继承的类型,但不保证其结果在各编译器版本之间保持一致
编译器警告(等级 4)C4843 type1”:对数组或函数类型的引用的异常处理程序不可访问,请改用“type2
编译器警告(等级 1)C4844 export module module_name;”现为声明模块接口的首选语法
编译器警告(等级 4)C4845 如果命令行中未指定“/d1initall[0|1|2|3]”,则忽略“__declspec(no_init_all)
编译器警告(等级 4)C4846 “value”不是“/d1initall”的有效参数:已忽略命令行标记
编译器警告(等级 4)C4847 __declspec(no_init_all)”只能应用于函数、类类型或本地变量:已忽略
编译器警告(等级 1)C4848 对 C++17 和早期版本中的标准属性“no_unique_address”的支持是供应商扩展
编译器警告(级别 1)C4849 openMP“clause”子句在“directive”指令中被忽略
编译器警告(等级 1,错误)C4854 将取消引用的 null 指针绑定到引用这一过程中具有未定义的行为
编译器警告(等级 1,关闭)C4855 “version”中已弃用通过“[=]”来隐式捕获“this
编译器警告(等级 4)C4856 “value”不是“/d1initAll:FillPattern”的有效参数(值必须介于 0 - 255)。 忽略命令行标记
编译器警告(等级 1)C4857 C++/CLI 模式不支持高于 C++17 的 C++ 版本;正在将语言设置为 /std:c++17
编译器警告(级别 1)C4858 正在放弃返回值:函数名称
编译器警告(级别 4)C4859 value”不是“/presetWarn”的有效参数:它必须是十进制值 > 0。 忽略命令行标记
编译器警告(级别 4)C4860 object name”:编译器初始化的存储“number”字节为零
编译器警告(级别 4)C4861 编译器初始化的存储“number”字节为零
编译器警告(级别 4)C4866 编译器无法针对对“operator_name”的调用强制执行从左到右计算顺序
编译器警告(等级 1,错误)C4867 “function”:函数调用缺少参数列表;请使用“call”创建指向成员的指针
编译器警告(等级 4)C4868 “file(line_number)”编译器可能不会在用大括号括起的初始化表达式列表中强制执行从左到右计算顺序
编译器警告(级别 3)C4869 nodiscard”只可应用于类、枚举和函数
编译器警告(等级 2)C4872 编译以下位置的 concurrency::parallel_for_each 的调用关系图时,检测到浮点数被零除:“___location”
编译器警告(等级 1)C4880 正在从“const type_1”强制转换为“type_2”:从指针或引用强制转换 constness 可能会导致 amp 限制函数中出现不确定的行为
编译器警告(等级 4)C4881 将不会为 tile_static 变量“variable-name”调用构造函数和/或析构函数
编译器警告(等级 1)C4882 将带非常量调用运算符的函数传递给 concurrency::parallel_for_each 已被弃用
编译器警告 C4883 function name”:函数大小禁止优化
编译器警告 C4900 “tool1”版本“version1”和“tool2”版本“version2”之间的 Il 不匹配
编译器警告(等级 1,关闭)C4905 宽字符串字面量强制转换为“LPSTR
编译器警告(等级 1,关闭)C4906 字符串字面量强制转换为“LPWSTR
编译器警告(错误)C4907 无法指定多个调用约定;将使用最后给定的约定
编译器警告(等级 1)C4910 “<identifier>”:“__declspec(dllexport)”和“extern”在显式实例化中不兼容
编译器警告(级别 1)C4912 “attribute”:在嵌套 UDT 上,属性有未定义的行为
编译器警告(级别 4)C4913 存在用户定义的二进制运算符“,”,但没有重载可以转换所有操作数,使用了默认的内置二进制运算符“,
编译器警告(等级 1)C4916 为具有 dispid“description”:必须通过接口引入
编译器警告(等级 1,关闭)C4917 “declarator”:GUID 只能与类、接口或命名空间关联
编译器警告(等级 4)C4918 “character”:杂注优化列表中的无效字符
编译器警告(级别 1)C4920 枚举 enum-name 成员 member_1=value_1 在枚举 enum-name 中已被看作 member_2=value_2
编译器警告(等级 3)C4921 “description”:不应累积指定属性值“attribute”
编译器警告(级别 1)C4925 “method”:不能从脚本调用调度接口方法
编译器警告(等级 1)C4926 “identifier”:已定义符号:忽略属性
编译器警告(级别 1)C4927 转换非法;隐式应用了多个用户定义的转换
编译器警告(等级 1,关闭)C4928 副本初始化非法;隐式应用了多个用户定义的转换
编译器警告(级别 1)C4929 “file”:类型库包含联合;忽略“embedded_idl”限定符
编译器警告(级别 1)C4930 “prototype”:未调用原型函数(是否是有意用变量定义的?)
编译器警告(等级 4,关闭)C4931 我们假定类型库是为 number 位指针生成的
编译器警告(级别 4)C4932 __identifier(identifier)__identifier(identifier) 不可区分
编译器警告(等级 1)C4934 __delegate(multicast)”已弃用,请改用“__delegate
编译器警告(级别 1)C4935 程序集访问说明符已从“access”修改
编译器警告(等级 1,错误)C4936 只有使用 /clr/clr:pure 编译时,才支持此 __declspec
编译器警告(级别 4)C4937 “text1”和“text2”都作为“directive”的参数时不可区分
编译器警告(级别 4)C4938 “var”:浮点 reduction 变量可能会导致在 /fp:strict#pragma fenv_access 下出现不一致的结果
编译器警告 C4939 #pragma vtordisp 已被否决,并将在 Visual C++ 将来的版本移除
编译器警告(级别 1)C4944 “symbol”:无法从“assembly1”导入符号:因为当前范围内已存在“symbol”
编译器警告(级别 1)C4945 “symbol”:无法从“assembly1”导入符号:因为“symbol”已从另一个程序集“assembly2”导入
编译器警告(等级 1,关闭)C4946 reinterpret_cast 在相关类之间使用:“class1”和“class2”
编译器警告(等级 1)C4947 “type_or_member”:标记为已过时
编译器警告(级别 2)C4948 “accessor”的返回类型与相应的资源库的最后一个参数类型不匹配
编译器警告(级别 1 和级别 4)C4949 只有使用“/clr[:option]”编译时,pragma“managed”和“unmanaged”才有意义
编译器警告(等级 1,错误)C4950 “type_or_member”:标记为已过时
编译器警告(等级 1)C4951 收集配置文件数据后已编辑过“函数”,没有使用函数配置文件数据
编译器警告(级别 1)C4952 “function”:在程序数据库“pgd-file”中未找到配置文件数据
编译器警告(级别 1)C4953 在收集配置文件数据后已编辑过内联“function”,没有使用配置文件数据
编译器警告 C4954 “function”:未配置(包含 __int64 switch 表达式)
编译器警告 C4955 “import2”:忽略导入;已经从“import1”导入
编译器警告(等级 1,错误)C4956 “type”:此类型不可验证
编译器警告(等级 1,错误)C4957 “cast”:从“cast_from”到“cast_to”的显式强制转换不可验证
编译器警告(等级 1,错误)C4958 “operation”:指针算法不可验证
编译器警告(等级 1,错误)C4959 不能在 /clr:safe 中定义非托管类型“type”,因为访问其成员会产生不可验证的代码
编译器警告(等级 4)C4960 “function”太大,无法配置
编译器警告(等级 1)C4961 没有将任何配置文件数据合并到“pgd-file”,因此已禁用按配置优化
编译器警告(等级 4,关闭)C4962 “function”:已禁用按配置优化,原因在于优化导致了配置数据文件不一致
编译器警告(等级 1)C4963 “description”:未找到配置文件数据;在检测的生成中使用了不同的编译器选项
编译器警告(级别 1)C4964 未指定任何优化选项;将不会收集配置文件信息
编译器警告(级别 1)C4965 整数 0 的隐式装箱;请使用 nullptr 或显式强制转换
编译器警告(等级 1)C4966 “function”的 __code_seg 注释包含不受支持的段名称,将忽略注释
编译器警告 C4970 委托构造函数:因为“type”是静态的,将忽略目标对象
编译器警告(等级 1)C4971 参数顺序:委托构造函数的“<target object>, <target function>”已弃用,请使用“<target function>, <target object="">”
编译器警告(等级 1,错误)C4972 直接修改取消装箱操作的结果或将其视为左值是不可验证的
编译器警告(等级 1)C4973 “symbol”:标记为弃用
编译器警告(等级 1)C4974 “symbol”:标记为弃用
编译器警告(级别 1)C4975 对于形参“parameter”,modopt“[modifier]”被忽略
编译器警告(级别 1)C4976 /W”的值“value”无效;假设为“1”
编译器警告(等级 3)C4981 Warbird:标记为 __forceinline 的函数“function”未内联,因为该函数包含异常语义
编译器警告(等级 3)C4983 已忽略“/analyze:sarif:hashname”,因为“/analyze:log”的参数是单个文件而不是目录
编译器警告 C4984 if constexpr”是 C++17 语言扩展
编译器警告(等级 4)C4985 “symbol_name”:先前声明中不存在属性
编译器警告(等级 4,关闭)C4986 “declaration”:异常规范与前面的声明不匹配
编译器警告(等级 4,关闭)C4987 使用了非标准扩展:“throw (...)
编译器警告(等级 4,关闭)C4988 “variable”:在类/函数范围外声明了变量
编译器警告(等级 4)C4989 “type”:类型包含冲突的定义
编译器警告(等级 3)C4990 Warbird: message
编译器警告(等级 3)C4991 Warbird:标记为 __forceinline 的函数“function”未内联,因为内联的保护级别高于父级
编译器警告(等级 3)C4992 Warbird:标记为 __forceinline 的函数“function-name”未内联,因为该函数包含无法保护的内联程序集
编译器警告(级别 3)C4995 “function”:名称被标记为 #pragma 已弃用
编译器警告(级别 3)C4996 “deprecated-declaration”:deprecation-message(或“声明为已弃用”)
编译器警告(级别 1)C4997 “class”:组件类不实现 COM 接口或伪接口
编译器警告(等级 1)C4998 预期失败:expectation(value)

另请参阅

C/C++ 编译器和生成工具错误与警告
编译器警告 C4000 - C5999