本部分中的文章介绍了 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_cast dynamic_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 |