Microsoft C/C++ 编译器警告 C4000 - C4199

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

重要

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

警告消息

警告 Message
编译器警告 C4000 未知警告
请在 Visual C++ 帮助菜单上,选择“技术支持”命令,
或打开“技术支持”帮助文件了解详细信息
编译器警告(级别 4,不再发出)C4001 使用了非标准扩展“single line comment”
编译器警告(级别 1,错误)C4002 类函数宏的调用“identifier”参数过多
编译器警告(级别 1,错误)C4003 类函数宏的调用“identifier”参数不足
编译器警告(级别 1)C4005 “identifier”:宏重新定义
编译器警告(级别 1)C4006 #undef 应输入标识符
编译器警告(级别 3)C4007 “function”:必须是“attribute”
编译器警告(等级 3)C4008 “function”:“attribute”特性被忽略
编译器警告(级别 1)C4010 单行注释包含续行符
编译器警告(级别 3)C4013 “function”未定义;假设外部返回 int
编译器警告(级别 1)C4015 “identifier”:位字段的类型必须是整型
编译器警告(级别 3)C4018 “expression”:有符号/无符号不匹配
编译器警告(级别 4)C4019 全局范围内的空语句
编译器警告(级别 1)C4020 “function”:实参太多
编译器警告(级别 1)C4022 “function”:指针与实参“parameter_number”不匹配
编译器警告(等级 1)C4023 “function”:基指针传递到非原型函数:参数“parameter_number”
编译器警告(级别 1)C4024 “function”:形参和实参“parameter_number”的不同类型
编译器警告(级别 1)C4025 “function”:基指针传递给带变量实参的函数:形参“parameter_number”
编译器警告(级别 1)C4026 使用形参表声明的函数
编译器警告(级别 1)C4027 未用形参表声明的函数
编译器警告(级别 1)C4028 形参“parameter_number”与声明不同
编译器警告(级别 1)C4029 声明的形参表与定义不同
编译器警告(级别 1)C4030 第一个形参表比第二个长
编译器警告(级别 1)C4031 第二个形参表比第一个形参表长
编译器警告(级别 4)C4032 提升后形参“parameter_number”具有不同的类型
编译器警告(级别 1)C4033 “function”必须返回值
编译器警告(级别 1)C4034 sizeof 返回 0
编译器警告(等级 3)C4035 “function”:无返回值
编译器警告(级别 1)C4036 未命名的“type”作为实际参数
编译器警告(级别 1)C4038 “modifier”:非法的类修饰符
编译器警告(级别 1)C4041 编译器限制:正在终止浏览器输出
编译器警告(级别 1)C4042 “identifier”:存储类不正确
编译器警告(级别 1)C4045 “array”:数组界限溢出
编译器警告(级别 1)C4047 “operator”:“identifier1”与“identifier2”的间接级别不同
编译器警告(级别 1)C4048 不同的数组下标:“identifier1”和“identifier2”
编译器警告(级别 1)C4049 编译器限制:正在终止行号发送
编译器警告(等级 1)C4051 类型转换;可能丢失数据
编译器警告(级别 1 和级别 4)C4052 函数声明不同;一个包含变量参数
编译器警告(级别 4)C4053 ?:”的一个 void 操作数
编译器警告(等级 1)C4055 “conversion”:从数据指针“type1”到函数指针“type2”
编译器警告(级别 2)C4056 浮点常量算术中的溢出
编译器警告(级别 4)C4057 “operator”:“identifier1”与“identifier2”在稍微不同的基类型间接寻址上不同
编译器警告(级别 3,关闭)C4060 switch 语句没有包含“case”或“default”标签
编译器警告(级别 4,关闭)C4061 枚举器“identifier”在 enum“enumeration”的开关中没有被 case 标签显式处理
编译器警告(级别 4,关闭)C4062 未处理 enum“enumeration”的开关中的枚举器“identifier”
编译器警告(级别 4,关闭)C4063 case“identifier”对于 enum“enumeration”的开关不是有效值
编译器警告(级别 4)C4064 不完整 enum“enumeration”的开关
编译器警告(级别 3,关闭)C4065 switch 语句包含“default”,但没有“case”标签
编译器警告(级别 3)C4066 宽字符常量的第一个字符之外的字符被忽略
编译器警告(级别 1)C4067 预处理器指令后有意外标记 - 应输入换行符
编译器警告(级别 1)C4068 未知的杂注“identifier”
编译器警告 C4069 长双精度型与双精度型的精度相同
编译器警告(级别 3)C4073 初始值设定项放置在库初始化区域中
编译器警告(级别 1)C4074 初始值设定项放置在编译器保留的初始化区域中
编译器警告(级别 1)C4075 初始值设定项放置在无法识别的初始化区域中
编译器警告(级别 1)C4076 “type_modifier”:不能与类型“typename”一起使用
编译器警告(级别 1)C4077 未知的 check_stack 选项
编译器警告(级别 1)C4079 意外的标记“token”
编译器警告(级别 1)C4080 应为段名标识符;找到“symbol”
编译器警告(级别 1)C4081 需要“token1”;找到“token2”
编译器警告(级别 1)C4083 应为“token”;找到标识符“identifier”
编译器警告(级别 1)C4085 杂注参数应为“on”或“off
编译器警告(级别 1)C4086 杂注参数应为“1”、“2”、“4”、“8”或者“16”
编译器警告(级别 1)C4087 “function”:用“void”参数列表声明
编译器警告(级别 1)C4088 “function”:实参“parameter_number”与形参“parameter_number”中的指针不匹配
编译器警告(级别 1)C4089 “function”:实参“parameter_number”与形参“parameter_number”中的类型不同
编译器警告(级别 1)C4090 “operation”:不同的“modifier”限定符
编译器警告(级别 1 和级别 2)C4091 “keyword”:没有声明变量时忽略“type”的左侧
编译器警告(级别 4)C4092 sizeof 返回“unsigned long”
编译器警告(级别 2)C4094 未标记的“token”声明没有符号
编译器警告(级别 1)C4096 “identifier”:接口不是 COM 接口;不发送到 IDL
编译器警告(级别 1)C4097 杂注参数应为“restore”或“off
编译器警告(级别 1)C4098 “function”:“void”函数返回值
编译器警告(级别 2)C4099 “identifier”:类型名称以前使用“object_type1”现在使用的是“object_type2”
编译器警告(级别 4)C4100 “identifier”:未引用的形参
编译器警告(级别 3 和级别 4)C4101 “identifier”:未引用的局部变量
编译器警告(级别 3)C4102 “label”:未引用的标签
编译器警告(级别 1)C4103 包括标题后更改了对齐方式,可能是由于缺少 #pragma pack(pop)
编译器警告(级别 1)C4109 意外的标识符“identifier”
编译器警告(级别 1 和级别 4)C4112 #line 要求 1 到“line_count”之间的整数
编译器警告(级别 1)C4113 “identifier1”的参数列表与“identifier2”不同
编译器警告(级别 1)C4114 多次使用同一类型限定符
编译器警告(等级 1 和等级 4)C4115 “type”:括号中的已命名类型定义
编译器警告(级别 1)C4116 括号中有未命名的类型定义
编译器警告(级别 1)C4117 保留“name”宏名;已忽略“Command”
编译器警告(级别 1)C4119 指定了不同的基“base1”和“base2”
编译器警告(级别 1)C4120 基于/不基于不匹配
编译器警告(级别 4)C4121 “symbol”:成员的对齐方式对封装敏感
编译器警告(级别 1)C4122 “function”:alloc_text 仅适用于带 C 链接的函数
编译器警告(等级 1)C4123 指定了不同的基表达式
编译器警告(级别 1)C4124 带有堆栈检查的 __fastcall 较低效
编译器警告(级别 4)C4125 十进制数字终止八进制转义序列
编译器警告(级别 4)C4127 条件表达式是常量
编译器警告(级别 1)C4129 “character”:不可识别的字符转义序列
编译器警告(级别 4)C4130 “operator”:字符串常量地址的逻辑操作
编译器警告(级别 4)C4131 “function”:使用旧样式的声明符
编译器警告(级别 4)C4132 “object”: 应初始化常量对象const
编译器警告(级别 1 和级别 3)C4133 “expression”:不兼容的类型 - 从“type1”到“type2”
编译器警告 C4137 “function”:浮点函数没有返回值
编译器警告(级别 1)C4138 在注释外找到“*/
编译器警告(级别 1,错误)C4141 “modifier”:使用了多次
编译器警告(级别 1)C4142 “identifier”:类型的良性重定义
编译器警告(级别 1)C4143 不支持 pragma“same_seg”;使用 __based 分配
编译器警告(级别 1)C4144 “expression”:关系表达式用作 switch 表达式
编译器警告(级别 1)C4145 “expression1”:关系表达式用作 switch 表达式;可能和“expression2”混淆
编译器警告(级别 2)C4146 一元负运算符应用于无符号类型,结果仍为无符号类型
编译器警告(级别 2)C4150 删除指向不完整“type”类型的指针;没有调用析构函数
编译器警告(级别 4)C4152 非标准扩展,表达式中的函数/数据指针转换
编译器警告(级别 1)C4153 表达式中的函数/数据指针转换
编译器警告(级别 1)C4154 删除数组表达式;转换到提供的指针
编译器警告(级别 1)C4155 未使用数组形式的“delete”删除数组表达式
编译器警告(级别 2)C4156 未使用数组形式的“delete”删除数组表达式;数组形式被替代
编译器警告(级别 1)C4157 C 编译器忽略了 pragma
编译器警告(级别 1)C4158 假设 #pragma pointers_to_members(full_generality, 'inheritance_type')
编译器警告(级别 3)C4159 #pragma 'pragma'(pop,...):已弹出先前推送的标识符“identifier”
编译器警告(级别 1)C4160 #pragma 'pragma'(pop,...):未找到先前入栈的标识符“identifier”
编译器警告(级别 3)C4161 #pragma 'pragma'(pop...):出栈的比入栈的多
编译器警告(级别 1)C4162 “identifier”:找不到带 C 链接的函数
编译器警告(级别 1)C4163 “identifier”:不可用作内部函数
编译器警告(级别 1)C4164 “function”:未声明内部函数
编译器警告(等级 3,关闭)C4165 HRESULT”正在转换为“bool”;是否确认要这样操作?
编译器警告(级别 1)C4166 构造函数/析构函数的非法调用约定
编译器警告(级别 1)C4167 “function”:仅可用作内部函数
编译器警告(级别 1)C4168 编译器限制:超出调试器类型,删除程序数据库“database”并重新生成
编译器警告(级别 1)C4172 返回局部变量或临时 optional_context 的地址
编译器警告(级别 1)C4174 “name”:不可用作 #pragma component
编译器警告(级别 1)C4175 #pragma component(browser, on):浏览器信息最初必须在命令行上指定
编译器警告(级别 1)C4176 “subcomponent”:#pragma component 浏览器的未知子组件
编译器警告(级别 1)C4177 #pragma “pragma”只应在全局范围或命名空间范围上使用
编译器警告(级别 1)C4178 对于 switch 表达式的类型而言,case 常量“constant”过大
编译器警告(级别 4,不再发出)C4179 //*”:被分析为“/”和“/\*”:与标准“//”注释混淆
编译器警告(级别 1)C4180 应用到函数类型的限定符没有意义;已将其忽略
编译器警告 C4181 应用到引用类型的限定符;已忽略
编译器警告(级别 1)C4182 #include 嵌套级别为 nest_count 深;可能无限递归
编译器警告(级别 1)C4183 “identifier”:缺少返回类型;假定为返回“int”的成员函数
编译器警告(级别 1)C4185 忽略未知的 #import 特性“attribute”
编译器警告(级别 1)C4186 #import 特性“attribute”需要“argument_count”自变量;已忽略
编译器警告(级别 1)C4187 #import 特性“attribute1”和“attribute2”不兼容;均被忽略
编译器警告(等级 1)C4188 常量表达式不是整型
编译器警告(级别 3 和级别 4)C4189 “identifier”:局部变量已初始化但未引用
编译器警告(级别 1)C4190 “identifier1”指定了 C 链接,但返回 UDT“identifier2”,这与 C 不兼容
编译器警告(级别 3,关闭)C4191 “operation”:从“type_of_expression”到“type_required”的不安全转换
使用结果指针进行函数调用可能会导致程序失败
编译器警告(级别 3)C4192 导入类型库“library”时自动排除“identifier”
编译器警告(等级 3)C4193 #pragma warning(pop):无匹配的“#pragma warning(push)
编译器警告(等级 1)C4194 不能嵌套 #pragma start_map_region;已忽略
编译器警告(等级 1)C4195 使用了 #pragma stop_map_region 但没有匹配的 #pragma start_map_region;已忽略
编译器警告(等级 1)C4196 需要“token1”或“token2”;找到“token3”
编译器警告(级别 3)C4197 “type”:忽略强制转换中的顶级 volatile
编译器警告(等级 1、等级 2、等级 3 和等级 4)C4199 message

另请参阅

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