“本机建议规则”规则集

本机推荐规则重点针对本机代码中的最关键问题和最常见问题,其中包括潜在安全漏洞和应用程序崩溃。应在您为本机项目创建的任何自定义规则集中包含此规则集。此规则集应与 Visual Studio 专业版及更高版本配合使用。

规则

说明

C6001

正在使用未初始化的内存

C6011

正在取消对空指针的引用

C6029

使用未经检查的值

C6031

返回值被忽略:

C6053

调用中包含零终止

C6054

零终止缺失

C6059

串联错误

C6063

格式函数缺少字符串参数

C6064

格式函数缺少整数参数

C6066

格式函数缺少指针参数

C6067

格式函数缺少字符串指针参数

C6101

正在返回未初始化的内存

C6200

索引超出缓冲区最大容量

C6201

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

C6214

从 HRESULT 到 BOOL 的强制转换无效

C6215

从 BOOL 到 HRESULT 的强制转换无效

C6216

由编译器插入的从 BOOL 到 HRESULT 的强制转换无效

C6217

对 HRESULT 的 NOT 测试无效

C6220

HRESULT 与 1 的比较无效

C6226

HRESULT 到 -1 的赋值无效

C6230

HRESULT 用作 Boolean 无效

C6235

非零常量的逻辑或运算

C6236

非零常量的逻辑或运算

C6237

零使用逻辑和失去副作用

C6242

已强制执行局部回退

C6248

正在创建 空 DACL

C6250

未释放的地址说明符

C6255

不受保护的 Alloca 用法

C6258

请使用终止线程

C6259

按位或限制开关中存在死代码

C6260

使用字节算术

C6262

堆栈使用过多

C6263

在循环中使用 alloca

C6268

强制转换中缺少括号

C6269

已忽略取消引用指针

C6270

格式函数缺少浮点参数

C6271

格式函数有多余参数

C6272

格式函数有非浮点参数

C6273

格式函数有非整型参数

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

位域到布尔值比较

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

Void 的 MustCheck

C6506

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

C6507

在取消引用空的零不匹配

C6508

常量写访问

C6509

对前置条件使用了返回值

C6510

Null 终止于非指针

C6511

MustCheck 必须为 Yes 或 No

C6513

无缓冲区大小的元素大小

C6514

缓冲区大小超出数组大小

C6515

非指针缓冲区大小

C6516

特性无属性

C6517

不可读缓冲区的有效大小

C6518

不可写缓冲区的可写大小

C6519

无效的批注:“NeedsRelease”属性的值必须为 Yes 或 No

C6521

无效的字符串大小间接引用

C6522

无效大小字符串类型

C6523

无效的字符串大小参数

C6525

无效大小字符串不可访问位置

C6526

无效的字符串大小缓冲区类型

C6527

无效的批注: 无法对 void 类型的值使用 NeedsRelease 属性

C6530

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

C6540

对此函数使用特性批注将使其现有的所有 __declspec 批注无效

C6551

大小规范无效: 表达式不可分析

C6552

Deref= 或 Notref= 无效: 表达式不可分析

C6701

该值不是有效的 Yes/No/Maybe 值:

C6702

该值不是字符串值

C6703

该值不是数字:

C6704

意外的批注表达式错误:

C6705

参数所需数目的注释不匹配参数的实际数目的注释

C6706

批注的意外批注错误:

C6995

未能保存 XML 日志文件

C26100

争用条件。

C26101

未能正确使用联锁操作

C26110

调用方未能持有锁

C26111

调用方未能解除锁

C26112

调用方无法持有任何锁

C26115

未能解除锁

C26116

未能获取或持有锁

C26117

解除未持有的锁

C26140

并发 SAL 注释错误

C28020

表达式对于此调用不适用

C28021

所批注的参数必须是指针

C28022

此函数的函数类与用于定义它的 typedef 的函数类不匹配。

C28023

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

C28024

要分配的函数指针是用函数类批注的,它未包含在函数类表中。

C28039

实参的类型应与该类型完全匹配

C28112

通过 Interlocked 函数访问的变量必须始终通过 Interlocked 函数来访问

C28113

通过互锁函数访问本地变量

C28125

该函数必须从 try/except 块中调用

C28137

该变量参数应改为(文本)常量

C28138

该常量参数应改为变量

C28159

请考虑改用其他函数

C28160

错误批注

C28163

该函数不应从 try/except 块中调用

C28164

正在将参数传递给一个函数,该函数需要一个指向某个对象的指针(而非指向某个指针的指针)

C28182

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

C28183

该参数可能是一个值,并且是在指针中找到的值的副本。

C28193

该变量保留了一个必须检查的值

C28196

未满足要求。(该表达式未计算为 true。)

C28202

对非静态成员进行了非法引用

C28203

对类成员的不明确引用。

C28205

在非法上下文中使用了 _Success_ 或 _On_failure_

C28206

左操作数指向 struct,使用'->'。

C28207

左操作数是 struct,使用“.”。

C28209

符号的声明具有冲突的声明

C28210

_On_failure_ 上下文的批注不得位于显式 pre 上下文中

C28211

SAL_context 需要静态上下文名称

C28212

批注需要指针表达式

C28213

_Use_decl_annotations_ 批注必须用于引用(无需修改)以前的声明。

C28214

特性参数名称必须为 p1...p9

C28215

typefix 无法应用于已具有 typefix 的参数

C28216

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

C28217

对于函数,批注的参数数量与在文件中找到的数量不匹配

C28218

对于函数参数,批注的参数与在文件中找到的参数不匹配

C28219

批注中的参数应为枚举成员

C28220

批注中的参数应为整数表达式

C28221

批注中的参数应为字符串表达式

C28222

批注需要 __yes、__no 或 __maybe

C28223

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

C28224

批注需要参数

C28225

在批注中找到的所需参数的数量不正确

C28226

批注也不能为 PrimOp (在当前声明中)

C28227

批注也不能为 PrimOp (参见上一个声明)

C28228

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

C28229

批注不支持参数

C28230

参数类型没有成员

C28231

批注仅对数组有效

C28232

pre、post 或 deref 不适用于任何批注。

C28233

pre、post 或 deref 适用于块。

C28234

_at_ 表达式不适用于当前函数。

C28235

函数不能作为批注单独存在

C28236

不能在表达式中使用该批注

C28237

不再支持参数上的批注

C28238

参数上的批注有多个 value、stringValue 和 longValue。使用 paramn=xxx

C28239

参数上的批注同时具有 value、stringValue 或 longValue 之一和 paramn=xxx。仅使用 paramn=xxx

C28240

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

C28241

无法识别参数上函数的批注

C28243

参数上函数的批注需要的取消引用次数多于已批注的实际类型所允许的次数

C28244

函数的批注包含无法分析的参数/外部批注

C28245

函数的批注在非成员函数上批注“this”

C28246

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

C28250

函数的注解不一致:上一个实例有错误

C28251

函数的注解不一致:此实例有错误

C28252

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

C28253

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

C28254

批注中不支持 dynamic_cast<>()。

C28262

在函数中找到了批注的语法错误(对于批注):

C28263

内部批注的条件批注中发现了语法错误

C28264

结果列表值必须是常量。

C28267

在函数中找到了批注的语法错误(对于批注):

C28272

检查时针对函数参数的批注与函数声明不一致

C28273

对于函数,线索与函数声明不一致

C28275

_Macro_value_ 的参数为 null

C28279

对于符号,已找到“begin”,但没有匹配的“end”

C28280

对于符号,发现了没有与之匹配的“begin”的“end”

C28282

格式字符串必须位于前置条件中:

C28285

对于函数,参数中有语法错误

C28286

对于函数,结尾附近有语法错误

C28287

对于函数, 批注中存在语法错误(无法识别的参数名)

C28288

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

C28289

对于函数: ReadableTo 或 WritableTo 没有用作参数的限制规范。

C28290

函数的批注包含的外部对象多于参数的实际数量

C28291

deref 级别 0 处的 post null/notnull 对于函数无意义。

C28300

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

C28301

函数的第一个声明没有批注

C28302

在批注上发现额外的 _Deref_ 运算符

C28303

在批注上发现不明确的 _Deref_ 运算符

C28304

发现对令牌应用了放置位置不正确的 _Notref_ 运算符

C28305

分析 token 时发现了错误。

C28306

对参数的批注已过时

C28307

对参数的批注已过时

C28350

该注释描述了在特定条件下不适用的情况.

C28351

批注描述了一种无法使用动态值(变量)的情况。