混合建議規則規則集

這些規則的重點在於支援 Common Language Runtime 之 C++ 專案中最常見且關鍵的問題,包括潛在的安全性漏洞和應用程式損毀,以及其他重要邏輯和設計錯誤。 您應該在您為支援 Common Language Runtime 之 C++ 專案建立的任何自訂規則集中都包含這個規則集。 這個規則集是設計用來與 Visual Studio Professional (含) 以上版本一起設定。

規則

描述

C6001

使用尚未初始化的記憶體。

C6011

取值 NULL 指標。

C6029

使用未經確認的值 。

C6031

忽略傳回值

C6053

從呼叫的無終止。

C6054

零終止遺失。

C6059

終結串連

C6063

遺漏格式化函式中的字串引數。

C6064

遺漏整格式化函式中的整數引數。

C6066

遺漏格式化函式中的指標引數。

C6067

遺漏格式化函式中的字串指標引數。

C6101

傳回未初始化的記憶體。

C6200

索引超出緩衝區最大值

C6201

索引超出堆疊緩衝區最大值

C6214

BOOL 到HRESULT的轉換無效

C6215

從BOOL 到HRESULT的轉換無效

C6216

無效的HRESULT 編譯器插入轉型 BOOL

C6217

無效的 HRESULT 測試與 NOT

C6220

無效的 HRESULT 比較為-1。

C6226

無效的 HRESULT 指派為-1。

C6230

為布林值的無效用法 HRESULT

C6235

含邏輯 OR的非零常數

C6236

含非零常數的邏輯 OR

C6237

零與邏輯And遺失副作用

C6242

強制區域回溯

C6248

建立空的 DACL

C6250

未發行的位址描述項

C6255

未受保護使用的Alloca

C6258

請使用來結束執行緒

C6259

在Bitwise-Or限制的切換的無作用程式碼

C6260

為位元組算術的使用。

C6262

過多的堆疊的使用方式

C6263

在迴圈中使用 Alloca

C6268

轉換而遺失的括號

C6269

忽略的指標取值

C6270

遺漏格式化函式中的浮點引數。

C6271

格式化函式中的額外引數。

C6272

格式化函式中的非浮點引數。

C6273

格式化函式中的非整數引數。

C6274

格式化函式中的非字元引數。

C6276

無效的字串轉換。

C6277

無效的 CreateProcess 呼叫

C6278

新陣列的純量 delete 刪除不相符

C6279

純量新的刪除陣列不相符

C6280

記憶體的配置解除配置不相符

C6281

位元關聯的優先順序

C6282

指派取代測試

C6283

原始Array-New Scalar-Delete不相符

C6284

無效的格式化函式中的物件引數。

C6285

常數的邏輯 OR

C6286

非零邏輯或遺失的副作用 (Side Effect)。

C6287

重複測試

C6288

相互包含邏輯和為 False

C6289

互斥邏輯或是 true。

C6290

Logical-Not Bitwise-And 優先順序

C6291

Logical-Not Bitwise-Or 優先順序。

C6292

從最大值向上來做計數。

C6293

從最小值來向下計數。

C6294

從未執行迴圈主體

C6295

無限迴圈。

C6296

只執行一次的迴圈

C6297

轉換為較大的大小的移位結果

C6299

為布林值比較的 Bitfield

C6302

無效的格式化函式中的字串引數。

C6303

無效的格式化函式中的寬字元字串引數。

C6305

不相符的大小和使用數目。

C6306

不正確的變數引數函式呼叫。

C6308

Realloc 遺漏。

C6310

不合法的例外狀況篩選條件常數

C6312

例外狀況繼續執行迴圈

C6314

Bitwise-Or的優先順序。

C6317

不是否定補數。

C6318

例外狀況繼續搜尋

C6319

以逗號忽略

C6324

非字串複本的字串比較

C6328

可能的引數型別不符。

C6331

VirtualFree 無效旗標

C6332

VirtualFree 無效的參數。

C6333

VirtualFree 無效的大小

C6335

遺漏處理序控制代碼

C6381

關閉資訊遺失。

C6383

項目計數位元組計數緩衝區滿溢 (Buffer Overrun)

C6384

指標大小小節。

C6385

讀取滿溢

C6386

撰寫滿溢

C6387

無效的參數值。

C6388

無效的參數值。

C6500

無效的屬性

C6501

發生衝突的屬性值。

C6503

參考不可以是空值。

C6504

在非指標的空值。

C6505

在 void的MustCheck

C6506

在非指標或陣列的緩衝區大小。

C6507

在取值零的空值不符

C6508

常數的寫入權限。

C6509

在之前狀況中回傳使用過

C6510

在非指標的空值結束

C6511

MustCheck 屬性必須為 Yes 或 No。

C6513

沒有緩衝區大小的項目大小。

C6514

緩衝區大小超過陣列大小

C6515

在非指標的緩衝區大小。

C6516

在屬性中沒有屬性。

C6517

在不可讀取緩衝區的有效大小

C6518

在非可寫入緩衝區的可寫入的大小

C6519

無效的註釋: 'NeedsRelease' 屬性的值必須為 Yes 或 No。

C6521

無效的指標值的字串大小。

C6522

無效的字串型別的大小

C6523

無效的字串參數大小

C6525

無效的不可能執行到的位置的字串大小。

C6526

無效的字串緩衝區型別的大小

C6527

無效的註釋: NeedsRelease 屬性在 void 型別的值不能使用。

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

這個呼叫的運算式不是 true。

C28021

被附註的參數必須是指標。

C28022

這個函式上的函式類別與定義所用之 typedef 上的函式類別不符:

C28023

指派或傳遞的函式應該至少有一個的 _Function_class_ 附註類別

C28024

要指派的函式指標會以函式類別標記附註,該類別並未包含在函式類別中。

C28039

實際參數的型別應要完全符合型別:

C28112

透過連鎖的函式存取的變數必須透過連鎖的函式永遠存取。

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

左運算元指向結構,請使用 '->'。

C28207

左運算元是結構,請使用 '.'。

C28209

符號的宣告有衝突的宣告。

C28210

On_failure_ 內容的註釋不能明確在pre context 中

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

在參數的註釋具有一個以上的值,stringValue 和 longValue。 請使用 paramn=xxx。

C28239

在參數的註釋具有兩個值,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_ 的參數為空值。

C28279

找到符號的 'begin',但沒有相符的 'end'。

C28280

找到符號的 'end',但沒有相符的 'begin'。

C28282

格式化字串必須在前置條件

C28285

針對函式,在參數中的語法錯誤

C28286

函式的結尾附近發生錯誤。

C28287

函式的 _At_() 附註中有語法錯誤 (無法辨認的參數名稱)。

C28288

函式的 _At_() 附註中有語法錯誤 (無效的參數名稱)。

C28289

對函式來說: ReadableTo 或 WritableTo 沒有有限的規格做為參數。

C28290

函式的附註包含比實際參數數目還多的外部。

C28291

位於 deref 層級 0 的 post null/notnull 對函式是無意義的。

C28300

運算子不相容型別的運算式運算元。

C28301

函式的第一個宣告中沒有附註。

C28302

額外的 _Deref_ 運算子在註解中被找到。

C28303

一個模稜兩可的 _Deref_ 運算子在註解中被找到。

C28304

找到非正確定位 _Notref_ 運算子套用至語彙基元。

C28305

在剖析時語彙基元找到的錯誤。

C28306

在參數中的標記法是逐漸會捨棄的狀態。

C28307

在參數中的標記法是逐漸會捨棄的狀態。

C28350

附註描述條件上不適合的情況:

C28351

附註描述條件中不可以使用動態值 (變數)。

CA1001

具有可處置欄位的型別應該是可處置的

CA1009

正確宣告事件處理常式

CA1016

以 AssemblyVersionAttribute 標記組件

CA1033

介面方法應該要可以由子型別呼叫

CA1049

擁有原生資源的型別應為可處置

CA1060

將 P/Invokes 移到 NativeMethods 類別

CA1061

不要隱藏基底類別方法

CA1063

必須正確實作 IDisposable

CA1065

不要在非預期的位置中引發例外狀況

CA1301

避免使用重複的快速鍵

CA1400

P/Invoke 進入點應該要存在

CA1401

P/Invokes 不應該為可見的

CA1403

自動配置型別不應該是 COM 可見的

CA1404

必須在 P/Invoke 之後立即呼叫 GetLastError

CA1405

COM 可見型別的基底型別應該是 COM 可見

CA1410

應該符合 COM 註冊方法

CA1415

P/Invokes 必須正確宣告

CA1821

必須移除空的完成項

CA1900

實值型別欄位應該為可移植的

CA1901

P/Invoke 宣告應該是可移植的

CA2002

請勿鎖定具有弱式識別的物件

CA2100

必須檢視 SQL 查詢中是否有安全性弱點

CA2101

必須指定 P/Invoke 字串引數的封送處理

CA2108

必須檢查實值型別上的宣告式安全性

CA2111

指標不應該為可見的

CA2112

受保護型別不應公開欄位

CA2114

方法安全性應該是型別的超集

CA2116

APTCA 方法應該只呼叫 APTCA 方法

CA2117

APTCA 型別應該只擴充 APTCA 基底型別

CA2122

不要間接公開具有連結要求的方法

CA2123

覆寫連結要求應該與基底相同

CA2124

必須將有弱點的 finally 子句包裝在外層 try 中

CA2126

必須同時具有型別連結要求和繼承要求

CA2131

安全性關鍵型別可能未參與型別等價

CA2132

預設建構函式至少必須和基底型別的預設建構函式一樣關鍵

CA2133

委派必須繫結至透明度一致的方法

CA2134

覆寫基底方法時,方法必須保持一致的透明度

CA2137

透明方法必須只包含可驗證的 IL

CA2138

透明方法不可以使用 SuppressUnmanagedCodeSecurity 屬性呼叫方法

CA2140

透明程式碼不可以參考安全性關鍵項目

CA2141

透明方法不可以滿足 LinkDemand

CA2146

型別至少必須和基底型別與介面一樣關鍵

CA2147

透明的方法不可以使用安全性判斷提示

CA2149

透明方法不可以呼叫機器碼

CA2200

請重新擲回以保存堆疊詳細資料

CA2202

不要多次處置物件

CA2207

必須初始化實值型別的靜態欄位內嵌

CA2212

不要以 WebMethod 標記 Serviced 元件

CA2213

可處置的欄位應該受到處置

CA2214

不要呼叫建構函式中的可覆寫方法

CA2216

可處置型別應該宣告完成項

CA2220

完成項應該呼叫基底類別完成項

CA2229

請實作序列化建構函式

CA2231

覆寫 ValueType.Equals 時必須一併多載等號比較運算子

CA2232

以 STAThread 標記 Windows Form 進入點

CA2235

必須標記所有不可序列化的欄位

CA2236

必須呼叫 ISerializable 型別上的基底類別方法

CA2237

必須以 SerializableAttribute 標記 ISerializable 型別

CA2238

請正確實作序列化方法

CA2240

必須正確實作 ISerializable

CA2241

必須提供格式化方法的正確引數

CA2242

必須正確測試 NaN