“本机建议规则”规则集

本机建议的 " 规则集侧重于最重要,并且您的本机代码的常见问题,包括潜在的安全漏洞和应用程序失败。 在任何自定义规则应加入此规则集您为本机项目创建。 此 ruleset 设计用于 Visual Studio 专业版和更高版本。

规则

说明

C6001

使用未初始化的内存

C6011

取消引用 null 指针

C6029

对未经检查的值的使用

C6031

返回忽略的值

C6053

零终止从调用

C6054

零终止缺少

C6059

串联错误

C6063

格式设置功能的缺少字符串参数

C6064

格式设置功能的缺少整数参数

C6066

格式设置功能的丢失的指针参数

C6067

格式设置功能的缺少字符串指针参数

C6101

返回未初始化的内存

C6200

索引超出缓冲区的最大数量

C6201

索引超出堆栈缓冲区的最大数量

C6214

到 BOOL 的无效强制转换 HRESULT

C6215

为 HRESULT 的无效强制转换 BOOL

C6216

为 HRESULT 的无效编译器插入的转换 BOOL

C6217

无效的 HRESULT 测试使用没有

C6220

无效的 HRESULT 比较为 -1

C6226

无效的 HRESULT 分配给 -1

C6230

无效的 HRESULT 使用如布尔值

C6235

非零常数。

C6236

逻辑或与非零常数

C6237

零与逻辑和丢失副作用

C6242

展开局部堆栈强制

C6248

创建空 DACL

C6250

未释放的地址描述符

C6255

对 Alloca 的不受保护的使用

C6258

使用 " 终止线程

C6259

死代码按位或限位开关

C6260

为字节算法中使用

C6262

额外的堆栈使用率

C6263

在循环中使用 Alloca

C6268

在转换中缺少括号

C6269

忽略的指针取消引用

C6270

格式设置功能的缺少的参数

C6271

格式设置功能的额外参数

C6272

格式设置功能的非浮点参数

C6273

非整数格式设置功能的 Argumen

C6274

格式设置功能的非字符参数

C6276

无效字符串转换

C6277

无效 CreateProcess 调用

C6278

数组新的标量删除不匹配

C6279

标量新数组删除不匹配

C6280

内存分配释放不匹配

C6281

按位关系优先级

C6282

分配替换测试

C6283

原始数组新的标量删除不匹配

C6284

对布局功能的对象参数无效

C6285

常数。

C6286

非零逻辑或丢失的副作用

C6287

冗余测试

C6288

相互包括逻辑和为 false

C6289

互斥为 true。

C6290

逻辑不按位与优先级

C6291

逻辑不按位或优先级

C6292

循环从最大值往上计数

C6293

循环从最小值往下计数

C6294

执行的循环体

C6295

无限循环

C6296

仅执行一次的循环

C6297

移位的结果被强制转换为更大

C6299

为布尔值比较的 Bitfield

C6302

格式设置功能的无效字符字符串参数

C6303

格式设置功能的无效的宽字符字符串参数

C6305

不匹配的大小和计数使用

C6306

不正确的变量参数函数调用

C6308

Realloc 泄漏

C6310

非法异常筛选器常数

C6312

异常继续执行循环

C6314

按位或优先级

C6317

不是补集

C6318

异常继续搜索

C6319

忽略由逗号

C6324

而不是字符串的字符串复制比较

C6328

潜在的参数类型不匹配

C6331

VirtualFree 无效标志

C6332

VirtualFree 参数无效

C6333

VirtualFree 无效范围

C6335

处理句柄泄漏

C6381

关闭信息缺少

C6383

元素计数字节计数缓冲区溢出

C6384

指针大小除法

C6385

读取超过

C6386

编写超过

C6387

参数值无效

C6388

参数值无效

C6500

无效的特性属性

C6501

冲突的属性

C6503

引用不能为空

C6504

在非指针的空

C6505

在无效的 MustCheck

C6506

在非指针或数组的缓冲区大小

C6507

在取消引用零的空不匹配

C6508

常数中编写

C6509

返回使用在前置条件

C6510

在非指针终止 null

C6511

MustCheck 必须是/否

C6513

没有缓冲区大小的元素的大小

C6514

缓冲区大小超过数组大小

C6515

在非指针的缓冲区大小

C6516

在属性上无特性

C6517

在不可读的缓冲区的有效范围

C6518

在非可写缓冲区的可写的大小

C6519

无效的批注:“NeedsRelease 属性的值必须是/否

C6521

无效范围字符串取消引用

C6522

无效范围字符串类型

C6523

无效字符串参数范围

C6525

无效范围字符串无法访问的位置

C6526

无效范围字符串缓冲区类型

C6527

无效的批注:“NeedsRelease 属性在无效类型的值不能使用

C6530

无法识别的格式字符串样式

C6540

使用此功的属性批注将无效其所有现有 __declspec 批注

C6551

大小规格无效:parsable 的表达式

C6552

无效 Deref= 或 Notref=:parsable 的表达式

C6701

该值不+一有效是/否/可能值

C6702

该值不是字符串值

C6703

该值不是数字

C6704

意外的批注表达式错误

C6705

参数的预期数字的批注不匹配参数的实际数目的批注

C6706

批注的意外的批注错误

C6995

未能保存 XML 日志文件

C26100

争用条件

C26101

无法正确地使用互锁操作

C26110

持有锁的调用方失败

C26111

释放锁的调用方失败

C26112

调用方不能保存任何锁

C26115

未能释放锁

C26116

无法获得或持有锁

C26117

释放锁 unheld

C26140

并发 SAL 注释错误

C28020

该表达式不是真正的此调用

C28021

批注的参数必须是指针

C28022

此函数的类不与用于 typedef 的功能类定义。

C28023

分配或传递的函数应至少有一个的一个 _Function_class_ 批注类

C28024

分配到的函数指针说明与功能类,在函数中包含课程表。

C28039

实际参数的类型应完全匹配该类型

C28112

通过一个互锁的功能捕获的变量必须传递一个互锁的函数始终访问。

C28113

访问局部变量传递一个互锁的功能

C28125

必须调用函数从一次尝试的内部/除块

C28137

可变参数应为 (文本) 常数

C28138

常数参数应为可变

C28159

考虑使用另一个函数。

C28160

错误批注

C28163

不应调用函数从一次尝试的内部/除块

C28164

传递给需要指向对象的指针的函数 (指向的不是指针)

C28182

取消引用 NULL 指针。 指针包含与其他指针的 null 值。

C28183

参数可以是一个值,并在指针找到的值的副本

C28193

变量表示必须检查的值

C28196

该要求是不够的。 (该表达式不计算结果为 true。)

C28202

非法引用非静态成员

C28203

明确引用类成员。

C28205

用于一个非法上下文或 _On_failure_ 的 _Success_

C28206

左操作数指向结构,使用 “- >

C28207

左操作数是结构,使用 “”。

C28209

符号的声明一个具有冲突的说明

C28210

__on_failure 上下文的批注不能在显式之前上下文

C28211

为 SAL_context 预期的静态上下文名称

C28212

批注预期的指针表达式

C28213

必须使用 _Use_decl_annotations_ 批注,引用,而无需修改,一个以前的声明。

C28214

属性参数名称必须是 p1… p9

C28215

typefix 不能应用于已具有 typefix 的参数

C28216

checkReturn 批注只应用于特定函数参数的后置条件。

C28217

为函数,参数数目到批注的不匹配的所有文件

C28218

指向函数 paramteer,批注的参数不匹配的所有文件

C28219

枚举的成员批注应在该批注的参数

C28220

整数表达式批注应在该批注的参数

C28221

为批注的参数所需的字符串表达式

C28222

__yes、批注预期的 __no 或 __maybe

C28223

未找到预期的标记/标识符批注的参数,

C28224

批注需要参数

C28225

没有看到需的正确数目的参数批注中

C28226

批注不能同时是 PrimOp (在当前声明)

C28227

批注不能同时是 PrimOp (请参见前面声明)

C28228

批注参数:不能使用类型批注

C28229

批注不支持参数

C28230

参数的类型没有成员。

C28231

批注只适用于数组

C28232

之前,后置或 deref 未应用于任何批注

C28233

之前,后置或 deref 会应用于块

C28234

__at 表达式不适用于当前函数

C28235

函数不能单独并肩作战与批注

C28236

批注将不能在表达式

C28237

在参数的批注不再支持

C28238

在参数的批注具有多个值、 stringValue 和 longValue。 使用 paramn=xxx

C28239

在参数的批注具有两个值、 stringValue 或 longValue;并 paramn=xxx。 仅使用 paramn=xxx

C28240

在参数的批注没有 param2,但 param1

C28241

函数的批注参数中不识别

C28243

函数的批注在参数比批注的实际类型允许需要更多的取消引用

C28244

函数的批注具有一个 unparseable 参数/外部批注

C28245

函数的批注说明 “this " 在非成员函数

C28246

函数的参数批注不匹配参数的类型

C28250

函数的不一致的批注:前面的实例有错误。

C28251

函数的不一致的批注:此实例都有一个错误。

C28252

函数的不一致的批注:参数具有此实例的另一个批注。

C28253

函数的不一致的批注:参数具有此实例的另一个批注。

C28254

dynamic_cast<> () 在注释不支持

C28262

在该批注的语法错误在函数中,批注的

C28263

在一个条件批注的语法错误为内部批注找到

C28264

结果列表值必须为常量。

C28267

在注释的语法错误是在函数中找到的批注。

C28272

函数的参数,批注,则请与函数声明不一致。

C28273

对于功能,主管与函数声明不一致。

C28275

为 _Macro_value_ 的参数为 null

C28279

对于符号, “首先找到资源,没有匹配的 “end

C28280

对于符号, “end 找到资源,没有匹配的 “开始

C28282

格式字符串必须在前置条件

C28285

为函数,参数中的语法错误

C28286

为函数,在尾部附近的语法错误

C28287

为函数,在 _At_ () 批注 (无法识别的参数名) 中的语法错误

C28288

为函数,在 _At_ () 批注 (无效参数名) 中的语法错误

C28289

为功能:ReadableTo 或 WritableTo 没有限制规范作为参数

C28290

函数的批注的参数的实际数目包含多个外部

C28291

发送 null/notnull 在 deref 级别 0 对于功能是无意义的。

C28300

不兼容的类型表达式运算符的操作数

C28301

函数的第一个声明的未批注。

C28302

一个额外的 _Deref_ 运算符在注释中。

C28303

不明确的 _Deref_ 运算符在注释中。

C28304

找到了不正确放置的 _Notref_ 运算符应用于标记。

C28305

错误,则标记以查看后分析。

C28306

在参数的批注个用户已废弃的

C28307

在参数的批注个用户已废弃的

C28350

批注描述不是有条件地适用的情况。

C28351

批注描述动态值 (变量) 的位置不能用于此情况。