建議使用 Visual Studio 2017

混合建議規則規則集

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

Microsoft 混合式建議規則的重點在於支援 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索引超出堆疊緩衝區最大值
C6214BOOL 到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。
C6290Logical-Not Bitwise-And 優先順序
C6291Logical-Not Bitwise-Or 優先順序。
C6292從最大值向上來做計數。
C6293從最小值來向下計數。
C6294從未執行迴圈主體
C6295無限迴圈。
C6296只執行一次的迴圈
C6297轉換為較大的大小的移位結果
C6299為布林值比較的 Bitfield
C6302無效的格式化函式中的字串引數。
C6303無效的格式化函式中的寬字元字串引數。
C6305不相符的大小和使用數目。
C6306不正確的變數引數函式呼叫。
C6308Realloc 遺漏。
C6310不合法的例外狀況篩選條件常數
C6312例外狀況繼續執行迴圈
C6314Bitwise-Or的優先順序。
C6317不是否定補數。
C6318例外狀況繼續搜尋
C6319以逗號忽略
C6324非字串複本的字串比較
C6328可能的引數型別不符。
C6331VirtualFree 無效旗標
C6332VirtualFree 無效的參數。
C6333VirtualFree 無效的大小
C6335遺漏處理序控制代碼
C6381關閉資訊遺失。
C6383項目計數位元組計數緩衝區滿溢 (Buffer Overrun)
C6384指標大小小節。
C6385讀取滿溢
C6386撰寫滿溢
C6387無效的參數值。
C6388無效的參數值。
C6500無效的屬性
C6501發生衝突的屬性值。
C6503參考不可以是空值。
C6504在非指標的空值。
C6505在 void的MustCheck
C6506在非指標或陣列的緩衝區大小。
C6507在取值零的空值不符
C6508常數的寫入權限。
C6509在之前狀況中回傳使用過
C6510在非指標的空值結束
C6511MustCheck 屬性必須為 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類別成員的參考模稜兩可。
C28205Success_ 或 _On_failure_ 用於不合法的內容中:
C28206左運算元指向結構,請使用 '->'。
C28207左運算元是結構,請使用 '.'。
C28209符號的宣告有衝突的宣告。
C28210On_failure_ 內容的註釋不能明確在pre context 中
C28211SAL_context 必須有靜態內容名稱。
C28212附註必須有預期的指標運算式。
C28213_Use_decl_annotations_ 附註必須不需修改就能用來參考預先宣告。
C28214屬性參數名稱必須是 p1...p9。
C28215typefix 不能套用到已經有 typefix 的參數
C28216checkReturn 附註只適用於為特定函式參數的後置條件。
C28217對於函式,附註的參數數目與其所找到的不符。
C28218對於函式參數,附註的參數與在檔案找到的不符。
C28219註釋中標註的參數需要列舉的成員
C28220整數運算式為附註預期標記法的參數
C28221用於附註的參數預期的字串運算式。
C28222__yes、 __no 或 __maybe為預期的附註
C28223未找到預期的附註參數語彙基元/識別項。
C28224附註需要參數。
C28225沒有找到附註中參數所需的正確數目
C28226附註不可以同時是 PrimOp (在目前宣告中)。
C28227附註不可以同時是 PrimOp (請參閱預先宣告)。
C28228附註參數:無法使用附註中的型別
C28229附註不支援參數。
C28230參數的型別沒有成員。
C28231附註只在陣列有效
C28232pre、post 或 deref 未套用至任何附註。
C28233pre、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函式不一致的附註:參數在這個執行個體有另一個附註。
C28254dynamic_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避免使用重複的快速鍵
CA1400P/Invoke 進入點應該要存在
CA1401P/Invokes 不應該為可見的
CA1403自動配置型別不應該是 COM 可見的
CA1404必須在 P/Invoke 之後立即呼叫 GetLastError
CA1405COM 可見型別的基底型別應該是 COM 可見
CA1410應該符合 COM 註冊方法
CA1415P/Invokes 必須正確宣告
CA1821必須移除空的完成項
CA1900實值型別欄位應該為可移植的
CA1901P/Invoke 宣告應該是可移植的
CA2002請勿鎖定具有弱式識別的物件
CA2100必須檢視 SQL 查詢中是否有安全性弱點
CA2101必須指定 P/Invoke 字串引數的封送處理
CA2108必須檢查實值型別上的宣告式安全性
CA2111指標不應該為可見的
CA2112受保護型別不應公開欄位
CA2114方法安全性應該是型別的超集
CA2116APTCA 方法應該只呼叫 APTCA 方法
CA2117APTCA 型別應該只擴充 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
顯示: