Microsoft C/C++ 编译器警告 C4600 到 C4799

本部分中的文章介绍了 Microsoft C/C++ 编译器警告消息 C4600 到 C4799。

重要

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”: 应输入有效的非空字符串
编译器警告(等级 1)C4602 #pragma pop_macro:“macro name”该标识符前面没有 #pragma push_macro
编译器警告(等级 1)C4603 “identifier”: 未定义宏或在预编译标头使用后定义发生改变
编译器警告(等级 1)C4604 “type”: 跨本机和托管边界按值传递参数要求有效的复制构造函数。 否则,运行时行为将处于未定义状态
编译器警告(等级 1)C4605 “/Dmacro”在当前命令行上指定,但未在生成预编译标头时指定
编译器警告(等级 1)C4606 #pragma 警告:忽略了“warning number”;Code Analysis 警告与警告等级无关
编译器警告(等级 3)C4608 “union_member”已被初始值设定项列表中的另一个联合成员“union_member”初始化
编译器警告(等级 3,错误)C4609 “type1”派生自类型“type2”上的默认接口“interface”。 对“type1”使用不同的默认接口,或中断基/派生关系
编译器警告(等级 4)C4610 对象“class”永远不能实例化 - 需要用户定义的构造函数
编译器警告(等级 4)C4611 “function”和 C++ 对象析构之间的交互是不可移植的
编译器警告(等级 1)C4612 包含文件名中有错误
编译器警告(等级 1)C4613 “symbol”: 无法更改段的类
编译器警告(等级 1)C4615 #pragma warning:未知的用户警告类型
编译器警告(等级 1)C4616 #pragma 警告:警告编号“number”不是有效的编译器警告
编译器警告(等级 1)C4618 pragma 参数包括空字符串;pragma 被忽略
编译器警告(等级 3)C4619 #pragma warning: 无警告编号“number”
编译器警告(等级 1)C4620 未找到类型“type”的“运算符 ++”后缀形式,请使用前缀形式
编译器警告(等级 1)C4621 未找到类型“type”的“运算符 --”后缀形式,请使用前缀形式
编译器警告(等级 3)C4622 覆盖创建对象文件的预编译头期间生成的调试信息:“file”
编译器警告(等级 4)C4623 “derived class”: 默认构造函数已被隐式定义为已删除,因为基类默认构造函数不可访问或已被删除
编译器警告(等级 1)C4624 “derived class”: 析构函数隐式定义为已删除,因为基类析构函数不可访问或已删除
编译器警告(等级 4)C4625 “derived class”: 未能生成复制构造函数,因为基类复制构造函数不可访问或已被删除
编译器警告(等级 4)C4626 “derived class”: 赋值运算符已隐式定义为删除,因为基类赋值运算符不可访问或已被删除
编译器警告(等级 1)C4627 “<identifier>”: 在查找预编译标头使用时跳过
编译器警告(等级 1)C4628 -Ze 不支持二合字母。 字符序列“digraph”未解释为“%s”的替换标记
编译器警告(等级 4)C4629 使用了有向图,字符序列“digraph”解释为标记“char”(如果这不是你想要的,请在这两个字符之间插入一个空格)
编译器警告(等级 1)C4630 “symbol”: “extern”成员定义上的存储类说明符非法
编译器警告(等级 2)C4631 MSXML 或 XPath 不可用,将不会处理 XML 文档注释。 reason
编译器警告(等级 1)C4632 XML 文档注释:文件 - 拒绝访问:原因
编译器警告(等级 3)C4633 XML 文档注释目标:错误:原因
编译器警告(等级 4)C4634 XML 文档注释目标:不能应用:原因
编译器警告(等级 3)C4635 XML 文档注释目标: XML 格式不正确: 原因
编译器警告(等级 3)C4636 应用于“construct”: 标记的 XML 文档注释需要非空“attribute”特性。
编译器警告(等级 3 和等级 4)C4637 XML 文档注释目标:已弃用 <include> 标记。 原因
编译器警告(等级 3)C4638 XML 文档注释目标:引用未知符号“symbol”。
编译器警告(等级 4)C4639 MSXML 错误,将不会处理 XML 文档注释。 原因
编译器警告(等级 3)C4640 “instance”: 本地静态对象的结构是非线程安全的
编译器警告(等级 3)C4641 XML 文档注释含有不明确的交叉引用:
编译器警告(等级 1)C4642 “类”:无法导入泛型参数“name”的约束
编译器警告(等级 4,关闭)C4643 C++ 标准不允许转发命名空间 std 中的声明“identifier”
编译器警告(等级 1)C4644 常数表达式中基于宏的 offsetof 模式的用法不标准;请改用 C++ 标准库中定义的 offsetof
编译器警告(等级 3)C4645 用 __declspec(noreturn) 声明的函数有返回语句
编译器警告(等级 3)C4646 用 __declspec(noreturn) 声明的函数有非 void 返回类型
编译器警告(等级 3)C4647 行为更改: __is_pod(type) 在各种版本中具有不同的值
编译器警告(等级 3)C4648 已忽略标准属性“carries_dependency”
编译器警告(等级 3)C4649 在此上下文中忽略了属性
编译器警告(等级 1)C4650 调试信息不在预编译标头中;只有标头中的全局符号可用
编译器警告(等级 1)C4651 为预编译标头,而非为当前编译指定“definition”
编译器警告(等级 1)C4652 编译器选项“option”与预编译头不一致;当前命令行选项将重写预编译头中定义的选项
编译器警告(等级 2)C4653 编译器选项'option'与预编译头不一致;忽略当前命令行选项
编译器警告(等级 4)C4654 将忽略放置在预编译标头行的 include 语句前面的代码。 将代码添加到预编译标头。
编译器警告(等级 1)C4655 “symbol”: 变量类型为自上次生成以来的新类型,或在其他地方以不同的方式定义
编译器警告(等级 1)C4656 “symbol”: 数据类型为自上次生成以来的新类型,或在其他地方以不同的方式定义
编译器警告(等级 1)C4657 表达式涉及一种数据类型,该数据类型为自上次生成以来的新类型
编译器警告(等级 1)C4658 “function”: 函数原型为自上次生成以来的新类型,或在其他地方以不同的方式声明
编译器警告(等级 1)C4659 #pragma“pragma”: 使用的保留段“segment”有未定义的行为,使用 #pragma comment(linker, ...)
编译器警告(等级 1)C4661 “identifier”: 没有为显式模板实例化请求提供适当的定义
编译器警告(等级 1)C4662 显式实例化;模板类“identifier1”无用于专用化“identifier2”的定义
编译器警告(等级 1)C4667 “function”: 未定义与强制实例化匹配的函数模板
编译器警告(等级 4)C4668 没有将“symbol”定义为预处理器宏,用“0”替换“directive”
编译器警告(等级 1)C4669 “cast”: 不安全的转换:“class”是托管的类型对象
编译器警告(等级 4)C4670 “identifier”: 该基类不可访问
编译器警告(等级 4)C4671 “identifier”: 复制构造函数不可访问
编译器警告(等级 4)C4672 “identifier1”: 不明确。 首先被看作“identifier2”
编译器警告(等级 4)C4673 引发“identifier”,在 catch 站点将不考虑下列类型
编译器警告(等级 1)C4674 “方法”应声明为“静态”,而且只能有一个参数
编译器警告(等级 4)C4676 “%s”: 析构函数不可访问
编译器警告(等级 1)C4677 “function”: 非私有成员的签名包含程序集专用类型“private_type”
编译器警告(等级 1)C4678 基类“base_type”的可访问性比“derived_type”低
编译器警告(等级 1)C4679 “member”: 无法导入成员
编译器警告(等级 4)C4680 “class”: 组件类不指定默认接口
编译器警告(等级 4)C4681 “class”: 组件类不指定是事件源的默认接口
编译器警告(等级 4)C4682 “parameter”: 未指定方向参数特性,默认为 [in]
编译器警告(等级 1)C4683 “function”: 事件源有“out”参数;当挂起多个事件处理程序时会遇到警告
编译器警告(等级 1)C4684 “attribute”: 警告!! 特性可能导致生成无效代码: 小心使用
编译器警告(等级 1)C4685 分析模板参数时需要“>>”,却找到了“>>”
编译器警告(等级 3)C4686 “user-defined type”: 行为可能有更改,UDT 中的更改返回调用约定
编译器警告(错误)C4687 'class':密封的抽象类不能实现接口'interface'
编译器警告(等级 1)C4688 “constraint”:约束列表包含程序集私有类型“type”
编译器警告(等级 1)C4689 “%c”: #pragma detect_mismatch 中不支持的字符;已忽略 #pragma
编译器警告(等级 4)C4690 [ emitidl( pop ) ]: 出栈的比入栈的多
编译器警告(等级 1)C4691 “type”: 未引用的程序集“file”中应使用引用的类型,但使用了当前翻译单元中定义的类型
编译器警告(等级 1)C4692 “function”: 非私有成员的签名包含程序集私有本机类型“native_type”
编译器警告(等级 1,错误)C4693 “class”: 密封的抽象类不能具有任何实例成员“instance member”
编译器警告(等级 1,错误)C4694 “class”: 密封的抽象类不能有基类“base_class”
编译器警告(等级 1)C4695 #pragma execution_character_set: 'character set' 不是受支持的参数: 当前仅支持“UTF-8”
编译器警告(等级 1)C4696 /ZBvalue1 选项超出范围;假设“value2”
编译器警告(等级 3)C4698 feature”仅用于评估,在将来的更新中可能会被更改或删除。
编译器警告(等级 1 和 4)C4700 使用了未初始化的局部变量“name”
编译器警告(等级 4)C4701 使用了可能未初始化的局部变量“name”
编译器警告(等级 4)C4702 无法访问的代码
编译器警告(等级 4)C4703 使用了可能未初始化的局部指针变量“%s”
编译器警告(等级 4)C4706 条件表达式内的赋值
编译器警告(等级 4)C4709 数组索引表达式内的逗号运算符
编译器警告(等级 4)C4710 “function”: 函数未内联
编译器警告(等级 1)C4711 为自动内联扩展选定了函数“function”
编译器警告(等级 4)C4714 函数“function”标记为 __forceinline 未内联
编译器警告(等级 1)C4715 “function”: 不是所有的控件路径都返回值
编译器警告(等级 1,错误)C4716 “function”: 必须返回值
编译器警告(等级 1)C4717 “function”: 如递归所有控件路径,函数将导致运行时堆栈溢出
编译器警告(等级 4)C4718 “function call”: 递归调用无副作用,正在删除
编译器警告(等级 1)C4719 指定 Qfast 时发现双精度常量 - 使用“f”作为后缀以指示单精度
编译器警告(等级 2)C4720 内联汇编程序报告: “message”
编译器警告(等级 1)C4721 “function”: 不可用作内部函数
编译器警告(等级 1)C4722 “function”: 析构函数永远不会返回,可能会发生内存泄漏
编译器警告(等级 3)C4723 潜在被 0 除
编译器警告(等级 3)C4724 潜在的以 0 求模
编译器警告(等级 3)C4725 在一些 Pentium 中,指令可能不准确
编译器警告 C4726 ARM arch4/4T 仅支持将“<cpsr_f> 或 <spsr_f>”与即时值一起使用
编译器警告(等级 1)C4727 命名为 pch_file 的 PCH 与 obj_file_1 和 obj_file_2 中的时间戳相同。 使用第一个 PCH。
编译器警告(等级 1)C4728 已忽略 /Yl- 选项,因为需要 PCH 引用
编译器警告(等级 4)C4729 根据警告,函数对于流图形太大
编译器警告(等级 1)C4730 “main”: 混合 _m64 和浮点表达式可能导致不正确的代码
编译器警告(等级 1)C4731 “pointer”: 帧指针寄存器'register'被内联程序集代码修改
编译器警告(等级 1)C4732 在此结构中不支持内部函数“%s”
编译器警告(等级 1)C4733 内联 asm 分配到“FS:0”:处理程序未注册为安全处理程序
编译器警告 C4734 COFF 调试信息部分中的行号超过 64k;停止为模块“module”发出 COFF 调试行号
编译器警告 C4735 align_function 特性参数“argument”不是 2 的幂且不是正数。 忽略特性
编译器警告 C4736 未指定 /Gy,因此已忽略 align_function 特性
编译器警告(等级 3)C4738 将 32 位浮点型结果存储在内存中,可能会降低性能
编译器警告(等级 1)C4739 对变量“var”的引用超过了其存储空间
编译器警告(等级 4)C4740 内联 asm 代码的流入或流出抑制全局优化
编译器警告(等级 1)C4742 “var”在“file1”和“file2”中有不同的对齐方式:“number”和“number”
编译器警告(等级 1)C4743 “type”在“file1”和“file2”中具有不同的大小:“number”和“number”字节
编译器警告(等级 1)C4744 “var”在“file1”和“file2”中具有不同的类型:“type1”和“type2”
编译器警告 C4745 由于“name”的大小问题,无法应用其可变访问
编译器警告 C4746 “expression”的可变访问受 /volatile:<iso|ms> 设置的限制;请考虑使用 __iso_volatile_load/store 内部函数
编译器警告(等级 1)C4747 调用托管“entrypoint”: 托管代码可能不会在加载程序锁定下运行,包括 DLL 入口点和从 DLL 入口点访问到的调用
编译器警告(等级 4)C4749 有条件支持: 应用于非标准布局类型“type”的 offsetof
编译器警告(等级 1)C4750 “identifier”:函数 with _alloca() 内嵌到循环中
编译器警告(等级 4)C4751 /arch:AVX 不适用于内联 ASM 内的 Intel(R) 流式处理 SIMD 扩展
编译器警告(等级 4)C4752 发现 Intel(R) 高级矢量扩展;请考虑使用 /arch:AVX
编译器警告 C4753 找不到指针的界限;忽略了 MPX 内部函数
编译器警告(等级 4)C4754 在 %s(%d) 处的比较中的算术运算的转换规则意味着无法执行一个分支。 请将“%s”强制转换为“%s”(或 %d 字节的相似类型)。
编译器警告 C4755 在 %s(%d) 处的比较中的算术运算的转换规则意味着无法在内联的函数中执行一个分支。 请将“%s”强制转换为“%s”(或 %d 字节的相似类型)。
编译器警告(等级 2)C4756 常量算法中溢出
编译器警告(等级 4)C4757 下标是较大的无符号值,是否使用负常量?
编译器警告 C4761 参数中的整型大小不匹配;提供了转换
编译器警告(等级 4)C4764 无法对齐大于 16 个字节的捕获对象
编译器警告(等级 4)C4767 节名称“%s”的长度超过 8 个字符,并将由链接器截断
编译器警告(等级 3)C4768 链接规范前的 __declspec 属性已忽略
编译器警告(等级 4)C4770 用作索引的部分验证的枚举“name
编译器警告 C4771 必须使用简单指针创建边界;已忽略 MPX 内部函数
编译器警告(等级 1,错误)C4772 #import 引用了缺少的类型库中的类型;“missing_type”用作占位符
编译器警告(等级 4)C4774 “string”: 参数 number 中应存在的格式字符串不为字符串字面量
编译器警告(等级 3)C4775 函数“function”的格式字符串“string”中使用了非标准扩展
编译器警告(等级 1)C4776 在函数“function”的格式字符串中不允许使用“%character
编译器警告(等级 4)C4777 “function”: 格式字符串“string”需要类型为“type1”的参数,但可变参数 number 的类型为“type2”
编译器警告(等级 3)C4778 “function”: 格式字符串“string”未终止
编译器警告(等级 1)C4788 “identifier”: 标识符被截断为“number”个字符
编译器警告(等级 1)C4789 缓冲区“identifier”(大小为 N 字节)将溢出;M 字节将在偏移 L 时开始写入
编译器警告(等级 2)C4792 函数“%s”使用 sysimport 声明并从本机代码引用;导入所需库以进行链接
编译器警告(等级 1 和 3)C4793 “function”: 编译为原生 :“原因”
编译器警告(等级 1)C4794 线程本地存储区变量“%s”的段由“%s”改为“%s”
编译器警告 C4798 为带有异常处理程序或展开语义的 p 代码函数“name”生成的本机代码
编译器警告(等级 1)C4799 函数“function”没有 EMMS 指令

另请参阅

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