Microsoft C/C++ 编译器警告 C4200 到 C4399

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

重要

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
编译器警告(等级 2 和等级 4)C4200 使用了非标准扩展:结构/联合中的零大小数组
编译器警告(级别 4)C4201 使用了非标准扩展:无名称的结构/联合
编译器警告(级别 4)C4202 使用了非标准扩展“...”:名称列表中的原型参数不合法
编译器警告 C4203 使用了非标准扩展:带静态成员变量的联合
编译器警告(级别 4)C4204 使用了非标准扩展:非常量聚合初始值设定项
编译器警告(级别 4)C4205 使用了非标准扩展:函数范围内的静态函数声明
编译器警告(级别 4)C4206 使用了非标准扩展:翻译单元为空
编译器警告(级别 4)C4207 使用了非标准扩展:扩展初始值设定项窗体
编译器警告(级别 4)C4208 使用了非标准扩展:delete [exp] - 计算但忽略 exp
编译器警告(级别 4)C4210 使用了非标准扩展:函数给定文件范围
编译器警告(级别 4)C4211 使用了非标准扩展:将“extern”重新定义为“static”
编译器警告(级别 4)C4212 使用了非标准扩展:函数声明使用了省略号
编译器警告(级别 4)C4213 使用了非标准扩展:在 lvalue 上进行强制转换
编译器警告(级别 4)C4214 使用了非标准扩:int 以外的位域类型
编译器警告(级别 1)C4215 使用了非标准扩展:长浮点
编译器警告(级别 1)C4216 使用了非标准扩展:长浮点
编译器警告(等级 4)C4218 使用了非标准扩展:必须至少指定一个存储类或类型
编译器警告(级别 4)C4220 varargs 与剩余的参数匹配
编译器警告(级别 4)C4221 使用的非标准扩展:“identifier”:无法使用自动变量“variable”的地址进行初始化
编译器警告(等级 1 和等级 4)C4223 使用了非标准扩展:将不是 lvalue 的数组转换为指针
编译器警告(级别 1)C4224 使用了非标准扩展:形参“identifier”以前被定义为类型
编译器警告(等级 1,错误)C4226 使用了非标准扩展:“keyword”是已过时关键字
编译器警告(级别 1)C4227 使用了记时错误:忽略引用上的限定符
编译器警告(级别 1)C4228 使用了非标准扩展:忽略声明符列表中逗号后面的限定符
编译器警告(等级 1,错误)C4229 使用了记时错误:忽略数据上的修饰符
编译器警告(级别 1)C4230 使用了记时错误:修饰符/限定符交错;忽略限定符
编译器警告(级别 4)C4232 使用了非标准扩展:“identifier”:dllimport“dllimport”的地址不是静态的,不保证标识
编译器警告(等级 1,错误)C4233 使用了非标准扩展:仅 C++ 中支持“keyword”关键字,而 C 中不支持
编译器警告(等级 4,错误)C4234 使用了非标准扩展:保留“keyword”关键字供将来使用
编译器警告(等级 1,错误)C4235 使用了非标准扩展:此体系结构不支持“keyword”关键字
编译器警告(级别 1)C4237 目前还不支持“keyword”关键字,但已保留该关键字供将来使用
编译器警告(级别 4)C4238 使用了非标准扩展:类 rvalue 用作了 lvalue
编译器警告(级别 4)C4239 使用了非标准扩展:“token”:从“type1”转换到“type2”
编译器警告(级别 3)C4240 使用了非标准扩展:对“classname”的访问现在定义为“access_specifier1”,以前将其定义为“access_specifier2”
编译器警告(等级 3,关闭)C4242 “identifier”: 从“type1”转换到“type2”,可能丢失数据
编译器警告(级别 3)C4243 存在从“type1”到“type2”的“conversion_type”转换,但该转换不可访问
编译器警告(级别 2)C4244 “conversion_type”:从“type1”转换到“type2”,可能丢失数据
编译器警告(等级 2、等级 3 和等级 4)C4244 “conversion_type”:从“type1”转换到“type2”,可能丢失数据
编译器警告(级别 4)C4245 “conversion_type”:从“type1”转换到“type2”,有符号/无符号不匹配
编译器警告(级别 2)C4250 “classname”:通过支配继承“base_classname::member”
编译器警告(等级 2)C4251 “object_type1”:“identifier1”需要有 dll 接口供“identfier2”的客户端使用
编译器警告(等级 4,关闭)C4254 “operator”:从“type1:field_bits”转换到“type2:field_bits”,可能丢失数据
编译器警告(级别 4,关闭)C4255 “function”: 未给出函数原型: 将“()”转换为“(void)”
编译器警告(级别 4)C4256 “function”:带虚拟基的类的构造函数具有“...”;调用可能与 Visual C++ 的早期版本不兼容
编译器警告(级别 1)C4258 “variable”:忽略 for 循环中的定义;使用封闭范围中的定义
编译器警告(级别 4,关闭)C4263 “function”:成员函数不替代任何基类虚成员函数
编译器警告(级别 4,关闭)C4264 “virtual_function”:任何重写都不可用于来自基“class”的虚成员函数;函数已被隐藏
编译器警告(级别 3,关闭)C4265 'classname':类包含虚函数,但其不常用的析构函数不是虚函数;该类的实例可能无法正确析构
编译器警告(级别 4,关闭)C4266 “virtual_function”:任何重写都不可用于来自基“class”的虚成员函数;函数已被隐藏
编译器警告(级别 3)C4267 “variable”:从“size_t”转换到“type”,可能丢失数据
编译器警告(级别 4)C4268 “identifier”:用编译器生成的默认构造函数初始化的“const”静态/全局数据用零填充对象
编译器警告(级别 1)C4269 “identifier”:用编译器生成的默认构造函数初始化的“const”自动数据产生不可靠的结果
编译器警告(级别 1)C4272 “function”:标记为 __declspec(dllimport);导入函数时必须指定本机调用约定
编译器警告(级别 1)C4273 “function”:dll 链接不一致
编译器警告(级别 1)C4274 #ident 被忽略;请参阅 #pragma comment(exestr, 'string') 的文档
编译器警告(级别 2)C4275 非 dll 接口 classkey“identifier1”用作 dll 接口 classkey“identifier2”的基
编译器警告(级别 1)C4276 “function”:不提供原型;假定无参数
编译器警告(等级 1)C4277 导入项“classname::member”既作为数据成员又作为函数成员存在;忽略数据成员
编译器警告(级别 3 和级别 4)C4278 “identifier”:类型库“library”中的标识符已经是宏;使用“rename”限定符
编译器警告(等级 3 和等级 4)C4279 “identifier”:类型库“library”中的标识符是关键字;使用“rename”限定符
编译器警告(级别 3)C4280 operator ->”是通过类型“type”自递归的
编译器警告(级别 3)C4281 operator ->”递归通过类型“type1”发生
编译器警告(级别 3)C4282 然后通过类型“type2”
编译器警告(级别 3)C4283 并通过类型“typeN”
编译器警告(级别 2)C4285 如果应用了 using 中辍表示法,则“identifier::operator ->”的返回类型为递归
编译器警告(级别 1)C4286 “derived_type”:被“line_number”行上的基类(“base_type”)捕获
编译器警告(级别 3,关闭)C4287 “operator”: 无符号/负常量不匹配
编译器警告(级别 1)C4288 使用了非标准扩展:“variable”:在 For 循环中声明的循环控制变量用在了 For 循环范围外;它与外部范围内的声明冲突
编译器警告(级别 4,关闭)C4289 使用了非标准扩展:“variable”:在 For 循环中声明的循环控制变量用在了 For 循环范围外
编译器警告(级别 3)C4290 忽略 C++ 异常规范,但指示函数不是 __declspec(nothrow)
编译器警告(级别 1)C4291 “declaration”:未找到匹配的删除运算符;如果初始化引发异常,则不会释放内存
编译器警告(级别 1)C4293 “shift_operator”:移位计数为负或过大,其行为未定义
编译器警告(级别 4)C4295 “array”:数组太小,无法包含终止空字符
编译器警告(级别 4,关闭)C4296 “operator”:表达式始终为“boolean_value”
编译器警告(级别 1)C4297 “function”:假定函数不引发异常,但确实发生了异常
编译器警告(等级 4)C4298 “identifier”:类型库“library”中的标识符已经是宏;重命名为“__identifier”
编译器警告(等级 4)C4299 “identifier”:类型库“library”中的标识符已经是关键字;重命名为“__identifier”
编译器警告 C4301 “derived_class::function”:重写虚函数与“base_class::function”的区别仅在于 const/volatile 限定符
编译器警告(级别 2)C4302 “conversion”: 从“type1”到“type2”截断
编译器警告(不再发出)C4303 不建议使用从“type1”到“type2”的 C 样式转换,请使用 static_cast__try_castdynamic_cast
编译器警告(等级 1、等级 2 和等级 4)C4305 “conversion”: 从“type1”到“type2”截断
编译器警告(等级 4)C4306 “conversion”:从“type1”转换到更大的“type2”
编译器警告(级别 2)C4307 “operator”:有符号整型常量溢出
编译器警告(级别 2)C4308 负整型常量已转换为无符号类型
编译器警告(级别 2)C4309 “conversion”:截断常量值
编译器警告(等级 4)C4310 强制转换截断常量值
编译器警告(级别 1)C4311 “variable”:从“type1”到“type2”的指针截断
编译器警告(级别 1)C4312 “operation”:从“type1”转换到更大的“type2”
编译器警告(级别 1)C4313 “function”:格式字符串中的“%format_specifier”与类型为“type”的参数“argument_number”发生冲突
编译器警告 C4314 应输入的 pragma 参数是“32”或“64”
编译器警告(等级 4)C4315 “classname”:成员“member”的“this”指针可能未按照构造函数的预期对齐“alignment”
编译器警告(级别 3)C4316 “identifier”:在堆上分配的对象可能未对齐“alignment”
编译器警告(等级 1)C4317 “printf_family”:没有为格式字符串传递足够的参数
编译器警告 C4318 将常量零作为长度传递给 memset
编译器警告(级别 1)C4319 “operator”:将“type1”零扩展到更大的“type2”
编译器警告(等级 1)C4321 自动生成接口“interface”的 IID
编译器警告(等级 1)C4322 自动生成类“class”的 CLSID
编译器警告(等级 1)C4323 重新使用“class”类的已注册 CLSID
编译器警告(级别 4)C4324 “structname”: 由于对齐说明符,结构被填充
编译器警告(级别 1)C4325 忽略标准节“section”的属性
编译器警告(级别 1)C4326 “function”的返回类型应为“type1”而不是“type2”
编译器警告 C4327 “assignment”:LHS 的间接对齐(“alignment1”)大于 RHS(“alignment2”)
编译器警告 C4328 “function”:形参 parameter_number 的间接对齐(parameter_alignment) 大于实参对齐 (argument_alignment)
编译器警告(级别 1)C4329 枚举上忽略对齐说明符
编译器警告(等级 1)C4330 已忽略部分“section”的属性“attribute”
编译器警告(级别 1)C4333 “shift_operator”:右移幅度过大,数据将丢失
编译器警告(级别 3)C4334 “shift_operator”:32 位移位的结果已隐式转换为 64 位(64 位移位是预期行为吗?)
编译器警告(级别 1)C4335 检测到 Mac 文件格式:请将源文件转换为 DOS 格式或 UNIX 格式
编译器警告(级别 4)C4336 在导入“library2”之前,导入交叉引用的类型库“library1”
编译器警告(级别 4)C4337 正在自动导入“library2”中的交叉引用类型库“library1”
编译器警告(等级 4)C4338 #pragma 指令:使用标准部分“section”
编译器警告(级别 4,关闭)C4339 “type”:在“WinRT|CLR”元数据中检测到使用了未定义的类型 - 使用此类型可能导致运行时异常
编译器警告(级别 1)C4340 “value”:已从正值包装为负值的值
编译器警告(级别 1、关闭、不再发出)C4342 行为更改: 调用了“function”,但在以前版本中调用的是成员运算符
编译器警告(级别 4)C4343 #pragma optimize("g",off) 替代 /Og 选项
编译器警告(级别 1)C4344 行为变更:使用显式模板参数导致调用“function”
编译器警告(级别 1)C4346 “name”:依赖名称不是类型
编译器警告(级别 1)C4348 “type”:重定义默认参数:参数“parameter_number”
编译器警告(级别 1、关闭、不再发出)C4350 行为变更:调用了“member1”而不是“member2”
编译器警告(等级 1)C4352 “identifier”:已定义内部函数
编译器警告(级别 1)C4353 使用了非标准扩展:常数 0 作为函数表达式。 请改用“__noop”内部函数
编译器警告(等级 1 和等级 4,关闭)C4355编译器警告(等级 1 和等级 4)C4355 “this”:用于基成员初始值设定项列表
编译器警告(级别 2)C4356 “member”:静态数据成员无法通过派生类初始化
编译器警告(级别 3)C4357 委托“delegate”(生成“function”时被忽略)的形参表中的 param 数组参数
编译器警告(级别 1)C4358 “operator”:组合委托的返回类型不是“void”;返回值未定义
编译器警告(级别 1 和级别 3)C4359 “type”:对齐说明符小于实际对齐(“alignment”),将被忽略
编译器警告(等级 2)C4362 “type”:CLR 不支持超过 8 个字节的对齐
编译器警告(级别 1)C4364 #using 表示之前在没有 as_friend 属性的 location (line_number) 处看到的程序集“assembly”;as_friend 未应用
编译器警告(级别 4,关闭)C4365 “conversion”:从“type1”转换到“type2”,有符号/无符号不匹配
编译器警告(级别 4)C4366 一元“operator”运算符的结果可能未对齐
编译器警告(等级 3)C4367 从“type1”转换到“type2”可能会引起数据类型不对齐异常
编译器警告(等级 1,错误)C4368 无法将“member”定义为托管“type”的成员:不支持混合类型
编译器警告(级别 1)C4369 “enumerator”:枚举器值“value”不能表示为“type”,值为“new_value”
编译器警告(等级 4,不再发出)C4370 “classname”:为了更好地封装,类的布局与早期版本的编译器已有所不同”
编译器警告(级别 3,关闭)C4371 “classname”:为了更好地封装成员“member”,类的布局可能与早期版本的编译器已有所不同
编译器警告(等级 4)C4373 “function”:虚函数替代“base_class_function”,当参数只在 const/volatile 限定符上有差异时,早期版本的编译器不会替代
编译器警告(级别 1)C4374 “function1”:接口方法不会由非虚拟方法“function2”来实现
编译器警告(级别 1)C4375 非公共方法“method2”不重写“method2”
编译器警告(级别 1)C4376 不再支持访问说明符'specifier1 specifier2:':请改用 'new_specifier:'
编译器警告(级别 1)C4377 本机类型默认情况下为私有类型;-d1PrivateNativeTypes 已被否决
编译器警告(级别 1)C4378 必须获得函数指针才能运行初始值设定项;请考虑使用 System::ModuleHandle::ResolveMethodHandle
编译器警告(级别 1)C4379 此编译器不支持公共语言运行时的版本“version_number”。 使用此版本可能会导致意外结果
编译器警告(等级 1,错误)C4380 “class”:无法弃用默认构造函数
编译器警告(级别 1)C4381 “function1”:接口方法不会由非公共方法“function2”来实现
编译器警告(级别 1)C4382 引发“type”:带有 __clrcall 析构函数或复制构造函数的类型只能在 /clr:pure 模块中捕获
编译器警告(级别 1)C4383 “instance_dereference_operator”:当存在用户定义的“instance_dereference_operator”运算符时,取消句柄引用的意义可以更改;请将该运算符编写为有关操作数的显式静态函数
编译器警告(级别 1)C4384 #pragma“pragma_name”应仅在全局范围应用
编译器警告(等级 3)C4387 “alternative”:已考虑使用
编译器警告(级别 4,关闭)C4388 “expression”:有符号/无符号不匹配
编译器警告(级别 4)C4389 “operator”:有符号/无符号不匹配
编译器警告(级别 3)C4390 “;”:找到空的受控语句;这是否是有意的?
编译器警告(级别 1)C4391 “function_signature”:不正确的内部函数返回类型,应为“type”
编译器警告(等级 1,错误)C4392 “function_signature”:内部函数参数个数不正确,应为“argument_count”参数
编译器警告(级别 1)C4393 “variable”:常量不会影响“literal”数据成员;已忽略
编译器警告(等级 1,错误)C4394 “function”:per-appdomain 符号不应该用 __declspec(dllexport) 进行标记
编译器警告(级别 1)C4395 “function”:将对 initonly 数据成员“member”的副本调用成员函数
编译器警告(级别 2)C4396 “function”:友元声明引用函数模板的专用化时,无法使用内联说明符
编译器警告(级别 1)C4397 DefaultCharSetAttribute 被忽略
编译器警告(级别 3)C4398 “variable”:per-process 全局对象可能无法与多个 appdomain 一起正常工作;请考虑使用 __declspec(appdomain)
编译器警告(等级 1,错误)C4399 “symbol”:在使用 /clr:pure 进行编译时,per-process 符号不应该用 __declspec(dllimport) 进行标记

另请参阅

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