Microsoft C/C++ 编译器警告 C4400 - C4599

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

重要

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++ 帮助和社区

警告消息

警告 消息
编译器警告(等级 1)C4600 #pragma“macro name”:应输入有效的非空字符串
编译器警告(等级 4)C4400 “type”:不支持此类型的 const/volatile 限定符
编译器警告(等级 1)C4401 “bitfield”:成员为位域
编译器警告(等级 1)C4402 必须使用 PTR 运算符
编译器警告(等级 1)C4403 非法 PTR 运算符
编译器警告(等级 3)C4404 忽略指令上的句号
编译器警告(等级 1)C4405 “identifier”:标识符是保留字
编译器警告(等级 1)C4406 指令上的操作数被忽略
编译器警告(等级 1)C4407 在指向成员表示形式的不同指针之间进行强制转换,编译器可能生成不正确的代码
编译器警告(等级 4)C4408 匿名“struct|union”不声明任何数据成员
编译器警告(等级 1)C4409 非法的指令大小
编译器警告(等级 1)C4410 非法的操作数大小
编译器警告(等级 1)C4411 “identifier”:符号解析为置换寄存器
编译器警告(等级 2)C4412 “function”:函数签名包含类型“type”;在纯代码与混合代码或本机代码之间传递 C++ 对象是不安全的
编译器警告 C4413 “classname::member”:引用成员被初始化为临时成员,临时成员在构造函数退出后就不再存在
编译器警告(等级 3)C4414 “function”:短跳转到转换为接近的函数
编译器警告(等级 1)C4415 重复 __declspec(code_seg('name'))
编译器警告(等级 1)C4416 __declspec(code_seg(...)) 包含空字符串:已忽略
编译器警告(等级 1)C4417 显式模板实例化不能具有 __declspec(code_seg(...)):已忽略
编译器警告(等级 1)C4418 在枚举上忽略了 __declspec(code_seg(...))
编译器警告(等级 3)C4419 “symbol”在应用于私有 ref 类“class”时无效
编译器警告(等级 1)C4420 “operator”:运算符不可用,改用“operator”;可能会危及运行时检查的安全性
编译器警告(等级 3)C4421 “parameter”:可恢复函数上的引用参数可能不安全
编译器警告(等级 3)C4423 “std::bad_alloc”:将被行号上的类 ('type') 捕获
编译器警告(等级 3)C4424 在行号上捕获前面有“type2”的 “type1”;如果引发“std::bad_alloc”,可能会导致不可预知的行为
编译器警告(等级 1)C4425 SAL 注释不能应用于“...”
编译器警告(等级 1)C4426 包含标头后更改了优化标记,可能是由于 #pragma optimize()
编译器警告(等级 1)C4427 “operator”:除数发生溢出,不确定的行为
编译器警告(等级 4)C4429 通用字符名称可能不完整或格式不正确
编译器警告(错误)C4430 缺少类型说明符 - 假定为 int。 注意:C++ 不支持默认的 int
编译器警告(等级 4)C4431 缺少类型说明符 - 假定为 int。 注意: C 不再支持默认的 int
编译器警告(等级 4)C4434 静态构造函数必须具有专用可访问性;更改为专用访问
编译器警告(等级 4)C4435 “derived_class”:/vd2 下的对象布局将因虚拟基“base_class”而更改
编译器警告(等级 1)C4436 构造函数或析构函数中从虚拟基“base_class”到“derived_class”的 dynamic_cast 在遇到部分构造的对象时可能失败
编译器警告(等级 4)C4437 从虚拟基“base_class”到“derived_class”的 dynamic_cast 在某些上下文中可能会失败
编译器警告 C4438 “function”:无法在 /await:clrcompat 模式下安全地调用。 如果“function”调用 CLR,可能会导致 CLR 头损坏
编译器警告(错误)C4439 “function”:签名中托管类型函数的定义必须具有 __clrcall 调用约定
编译器警告(等级 1)C4440 从“calling_convention1”到“calling_convenction2”的调用约定重定义被忽略
编译器警告(等级 1)C4441 “calling_convention1”的调用约定被忽略;改为使用“calling_convention2”
编译器警告(等级 1)C4442 在 __annotation 参数中嵌入 null 终止符。 值将被截断。
编译器警告(等级 1)C4443 预期的 pragma 参数为“0”、“1”或“2”
编译器警告(等级 3)C4444 “identifier”:在此上下文中未实现顶级“__unaligned”
编译器警告(等级 1)C4445 “function”:在“WinRT|managed”类型中,虚方法不能为私有方法
编译器警告(等级 1)C4446 “type”:由于与类型名称冲突,无法将成员“name1”映射到此类型。 该方法已重命名为“name2”
编译器警告(等级 1)C4447 在没有线程模型的情况下找到“main”签名。 考虑使用“int main(Platform::Array<Platform::String^>^ args)”。
编译器警告 C4448 “type1”没有在元数据中指定默认接口。 选择:“type2”,它在运行时可能会失败
编译器警告 C4449 应将非密封类型“type”标记为“[WebHostHidden]”
编译器警告 C4450 由于“type1”派生自“type2”,因此应将其标记为“[WebHostHidden]”
编译器警告(等级 4)C4451 “classname1::member”:在此上下文中使用 ref 类“classname2::member”可能会导致跨上下文的对象封送处理无效
编译器警告(等级 1)C4452 “identifier”:公共类型不能在全局范围内。 它必须在属于输出 .winmd 文件名子级的命名空间中。
编译器警告(等级 1)C4453 “type”:不应在不是“[WebHostHidden]”的公共类型的发布接口中使用“[WebHostHidden]”类型
编译器警告(等级 1)C4454 如果在未指定 [DefaultOverload],则“function”的重载次数超过输入参数的次数。 选择“declaration”作为默认重载
编译器警告(等级 1)C4455 “operator operator”:已保留不以下划线开头的文本后缀标识符
编译器警告(等级 4)C4456 “identifier”的声明隐藏了上一个本地声明
编译器警告(等级 4)C4457 “identifier”的声明隐藏了函数参数
编译器警告(等级 4)C4458 “identifier”的声明隐藏了类成员
编译器警告(等级 4)C4459 “identifier”的声明隐藏了全局声明
编译器警告(等级 4)C4460 “WinRT|managed”运算符“operator”具有按引用传递的参数。 “WinRT|managed”运算符“operator”的语义与 C++ 运算符“cpp_operator”的语义不同,是否希望按值传递
编译器警告(等级 1)C4461 “classname”:此类具有终结器“!finalizer”,但没有析构函数“~dtor”
编译器警告(等级 1,错误)C4462 “type”:无法确定此类型的 GUID。 程序可能在运行时失败。
编译器警告(等级 4)C4463 溢出;将“value”赋给位域,该域只能将值从“min_value”保留到“max_value”
编译器警告(等级 4)C4464 相对 include 路径包含“..”
编译器警告 C4466 无法执行协同例程堆删除
编译器警告(等级 1)C4467 ATL 属性已被弃用
编译器警告(等级 1)C4468 [[fallthrough]] 属性后面必须跟有 case 标签或 default 标签
编译器警告(等级 1)C4470 在 /clr 下忽略了浮点控制 pragma
编译器警告(等级 4)C4471 “enumeration”:未区分范围的枚举的前向声明必须有基础类型(假定为 int)
编译器警告(等级 1)C4472 “identifier”是本机枚举:添加访问说明符 (private/public) 以声明“WinRT|managed”枚举
编译器警告(等级 1)C4473 “function”:没有为格式字符串传递足够的参数
编译器警告(等级 3)C4474 “function”:为格式字符串传递的参数太多
编译器警告(等级 3)C4475 “function”:长度修饰符“modifier”不能与格式说明符中的类型字段字符“character”一起使用
编译器警告(等级 3)C4476 “function”:格式说明符中的未知类型字段字符“character”
编译器警告(等级 1)C4477 “function”:格式字符串“string”需要类型为“type”的参数,但可变参数 number 的类型为“type”
编译器警告(等级 1)C4478 “function”:不可在同一格式字符串中混用位置占位符和非位置占位符
编译器警告(错误)C4480 使用了非标准扩展:请为枚举“enumeration”指定基础类型
编译器警告(等级 4)C4481 使用了非标准扩展:替代说明符“keyword”
编译器警告 C4482 使用了非标准扩展:限定名中使用了枚举“enumeration”
编译器警告(等级 1,错误)C4483 语法错误:应为 C++ 关键字
编译器警告(错误)C4484 “override_function”:匹配 ref 基类方法“base_class_function”,但没有标记为“virtual”、“new”或“override”;假定为“new”(而不是“virtual”)
编译器警告(错误)C4485 “override_function”:匹配 ref 基类方法“base_class_function”,但没有标记为“new”或“override”;假定为“new”(和“virtual”)
编译器警告(等级 1)C4486 “function”:ref 类或值类的私有虚方法应该标记为“sealed”
编译器警告(等级 4)C4487 “derived_class_function”:匹配继承的非虚拟方法“base_class_function”,但未显式标记为“new”
编译器警告(等级 1)C4488 “function”:需要“keyword”关键字来实现接口方法“interface_method”
编译器警告(等级 1)C4489 “specifier”:不允许在接口方法“method”上使用;重写说明符只允许在 ref 类和值类方法上使用
编译器警告(等级 1)C4490 “override”:重写说明符的用法不正确;“function”与 ref 基类方法不匹配
编译器警告(等级 1)C4491 “name”:具有非法的 IDL 版本格式
编译器警告(等级 1,错误)C4492 “function1”:匹配 ref 基类方法“function2”,但未标记为“override”
编译器警告(等级 3,错误)C4493 删除表达式没有影响,因为“type”的析构函数没有“public”可访问性
编译器警告(等级 1)C4494 “function”:因为函数的返回类型不是指针或引用,将忽略 __declspec(allocator)
编译器警告 C4495 使用了非标准扩展“__super”:替换为显示基类名
编译器警告 C4496 使用了非标准扩展“for each”:替换为 ranged-for 语句
编译器警告 C4497 使用了非标准扩展“sealed”:替换为“final”
编译器警告 C4498 使用了非标准扩展:“extension”
编译器警告(等级 4)C4499 “function”:显式专用化不能具有存储类 (ignored)"
编译器警告(等级 1)C4502 “linkage specification”要求使用关键字“extern”,并且该关键字必须在所有其他说明符之前
编译器警告(等级 1)C4503 “identifier”:超出修饰名的长度,名称被截断
编译器警告(等级 4)C4505 “function”:已删除未引用的本地函数
编译器警告(等级 1)C4506 内联函数“function”没有定义
编译器警告(等级 1)C4508 “function”:函数应返回一个值;假定“void”返回类型
编译器警告 C4509 使用了非标准扩展:“function”使用 SEH,“object”具有析构函数
编译器警告(等级 4)C4510 “class”:已将默认构造函数隐式定义为已删除
编译器警告(等级 3)C4511 “class”:已将复制构造函数隐式定义为已删除
编译器警告(等级 4)C4512 “class”:已将赋值运算符隐式定义为已删除
编译器警告(等级 4)C4513 “class”:已将析构函数隐式定义为已删除
编译器警告(等级 4)C4514 “function”:已删除未引用的内联函数
编译器警告(等级 4)C4515 “namespace”:命名空间使用其本身
编译器警告(等级 4)C4516 “class::symbol”:不建议使用访问声明;成员 using 声明提供更好的选择
编译器警告(等级 4)C4517 不建议使用访问声明;成员 using 声明提供更好的选择
编译器警告(等级 1)C4518 “specifier”:此处遇到意外的存储类或类型说明符;已忽略
编译器警告(错误)C4519 仅允许在类模板上使用默认模板参数
编译器警告(等级 3)C4521 “class”:指定了多个复制构造函数
编译器警告(等级 3)C4522 “class”:指定了多个赋值运算符
编译器警告(等级 3)C4523 “class”:指定了多个析构函数
编译器警告(等级 1)C4526 “function”:静态成员函数无法重载虚函数“virtual function”忽略,将隐藏虚函数
编译器警告(等级 1)C4530 使用了 C++ 异常处理程序,但未启用展开语义。 请指定 /EHsc
编译器警告(等级 1)C4531 C++ 异常处理在 Windows CE 上不可用。 使用结构化异常处理
编译器警告(等级 1)C4532 “continue”:在终止处理期间从“__finally/finally”块跳出的行为未定义
编译器警告(等级 1)C4533 “variable”的初始化被“goto”标签跳过
编译器警告(等级 3)C4534 由于默认参数,“constructor”将不是类/结构“identifier”的默认构造函数
编译器警告(等级 3)C4535 调用 _set_se_translator() 需要 /EHa
编译器警告(等级 4)C4536 “typename”:类型名超出了“character_limit”字符的元数据限制
编译器警告(等级 1)C4537 “object”:“.”应用于非 UDT 类型
编译器警告(等级 3)C4538 “type”:不支持此类型的 const/volatile 限定符
编译器警告(等级 1)C4540 dynamic_cast 用于转换为不可访问或不明确的基;运行时测试将失败(“type1”到“type2”)
编译器警告(等级 1)C4541 “identifier”用在了带 /GR- 的多态类型“type”上;可能导致不可预知的行为
编译器警告(等级 1)C4542 跳过生成合并的注入文本文件,无法写入 filetype 文件:“issue”:message
编译器警告(等级 3)C4543 由属性“no_injected_text”抑制的注入文本
编译器警告(等级 1)C4544 “declaration”:已忽略此模板声明中的默认模板自变量
编译器警告(等级 1)C4545 逗号前的表达式计算为缺少自变量列表的函数
编译器警告(等级 1)C4546 逗号前的函数调用缺少自变量列表
编译器警告(等级 1)C4547 “operator”: 逗号前的运算符不起任何作用;需要带副作用的运算符
编译器警告(等级 1)C4548 逗号前的表达式不起任何作用;应输入带副作用的表达式
编译器警告(等级 1)C4549 “operator”:逗号前的运算符不起任何作用;是否是有意使用“operator”的
编译器警告(等级 1)C4550 表达式计算为缺少参数列表的函数
编译器警告(等级 1)C4551 缺少参数列表的函数调用
编译器警告(等级 1)C4552 “operator”:运算符不起任何作用;应输入带副作用的运算符
编译器警告(等级 1)C4553 运算符:运算符不起任何作用;是否是有意使用此“运算符”?
编译器警告(等级 3)C4554 C4554 “operator”:检查运算符优先级是否存在的可能的错误;使用括号阐明优先级
编译器警告(等级 1)C4555 表达式无效;应输入带副作用的表达式
编译器警告(等级 1)C4556 内在直接参数“value”的值不在“lower_bound - ”范围中
编译器警告(等级 3)C4557 “__assume”包含效果“effect”
编译器警告(等级 1)C4558 操作数“value”的值不在“lower_bound - upper_bound”范围中
编译器警告(等级 4)C4559 “function”:重新定义;函数获取 __declspec(modifier)
编译器警告(等级 1)C4561 “__fastcall”与“/clr”选项不兼容:转换为“__stdcall”
编译器警告(等级 4)C4562 “/clr”选项要求完全原型的函数:将“()”转换为“(void)”
编译器警告(等级 4)C4564 类“classname”的方法“method”定义不受支持的默认参数“parameter”
编译器警告(等级 4)C4565 “function”:重新定义;该符号先前已使用 __declspec(modifier) 声明
编译器警告(等级 1)C4566 由通用字符名称“char”表示的字符不能在当前代码页 (number) 中表示出来
编译器警告(等级 1)C4568 “function”:没有与该显式重写的签名匹配的成员
编译器警告(等级 3)C4569 “function”:没有与该显式重写的签名匹配的成员
编译器警告(等级 3)C4570 “type”:没有显式声明为抽象,但具有抽象函数
编译器警告(等级 4)C4571 信息:自 Visual C++ 7.1 之后,catch(...) 语义发生了变化;不再捕获结构化的异常 (SEH)
编译器警告(等级 1)C4572 /clr 下的 [ParamArray] 特性已否决,请改用“...”
编译器警告(等级 1)C4573 “Lambda 函数”的用法要求编译器捕获“this”,但当前默认捕获模式不允许使用“this”
编译器警告(等级 4)C4574 “identifier”被定义为“0”:你是否希望使用“#if identifier”
编译器警告(等级 1)C4575 “__vectorcall”与“/clr”选项不兼容:转换为“__stdcall”
编译器警告(等级 1,错误)C4576 后跟初始值设定项列表的带圆括号类型是一个非标准的显式类型转换语法
编译器警告(等级 1,关闭)C4577 在未指定异常处理模式的情况下使用了“noexcept”;不一定会在异常时终止。 请指定 /EHsc
编译器警告(等级 1,错误)C4578 “abs”:从“type1”转换到“type2”,可能丢失数据(你的意思是调用“function”还是 #include <cmath>?)
编译器警告(等级 3)C4580 [attribute] 已弃用;改为指定 System::Attribute 或 Platform::Metadata 作为基类
编译器警告(等级 1)C4581 已弃用的行为:将“"string"”替换为“string”以处理属性
编译器警告(等级 4)C4582 “type”: 构造函数未隐式调用
编译器警告(等级 4)C4583 “type”: 析构函数未隐式调用
编译器警告(等级 1)C4584 “class1”:基类“class2”已是“class3”的基类
编译器警告(等级 1,错误)C4585 “class”:WinRT“公共 ref 类”必须是密封的或派生自现有的非密封类
编译器警告(等级 1,错误)C4586 “type”:不能在名为“Windows”的顶级命名空间中声明公共类型
编译器警告(等级 1)C4587 “anonymous_structure”: 行为变更: 不再隐式调用构造函数
编译器警告(等级 1)C4588 “anonymous_structure”:行为变更:不再隐式调用析构函数
编译器警告(等级 4)C4589 抽象类“class1”的构造函数忽略了虚拟基类“class2”的初始化设定值
编译器警告(等级 1)C4591 “constexpr”超出了 number 的调用深度限制 (/constexpr:depth<NUMBER>)
编译器警告(等级 3)C4592 “function”:“constexpr”调用评估失败;函数将在运行时调用
编译器警告(等级 1)C4593 “function”:“constexpr”调用评估步骤限制超出了“limit”;请使用 /constexpr:steps<NUMBER> 增加限制
编译器警告(等级 3)C4594 “type”:如果引发异常,则不会隐式调用析构函数
编译器警告(等级 1)C4595 “type”:行为变更:如果引发异常,将不再隐式调用析构函数
编译器警告(等级 4)C4596 “identifier”:成员声明中的非法限定名
编译器警告(错误)C4597 未定义的行为:offsetof 应用于虚拟基的成员
编译器警告(等级 1 和等级 3)C4598 “#include "header"”:预编译标头中的标头编号 number 与该位置的当前编译不匹配
编译器警告(等级 3)C4599 “flag path”:命令行参数编号 number 与预编译标头不匹配

另请参阅

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