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

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

重要

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

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

注意

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

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

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

警告消息

警告 消息
编译器警告(等级 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 type”:“type1”需要具有 dll 接口供“type2”的客户端使用
编译器警告(等级 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 “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 表示之前在没有 属性的 ___location (line_number) 处看到的程序集“assemblyas_friend”;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 不再支持访问说明符'specifier1specifier2:':请改用 '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 符号不应该用 dllexport__declspec( 进行标记)
编译器警告(级别 1)C4395 “function”:将对 initonly 数据成员“member”的副本调用成员函数
编译器警告(级别 2)C4396 “function”:友元声明引用函数模板的专用化时,无法使用内联说明符
编译器警告(级别 1)C4397 DefaultCharSetAttribute 被忽略
编译器警告(级别 3)C4398 “variable”:per-process 全局对象可能无法与多个 appdomain 一起正常工作;请考虑使用 __declspec(appdomain)
编译器警告(等级 1,错误)C4399 “symbol”:在使用 进行编译时,per-process 符号不应该用 __declspec(dllimport) 进行标记/clr:pure

另请参阅

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