Sdílet prostřednictvím


Sada pravidel Smíšená doporučená pravidla

Pravidla Microsoft smíšené doporučeno zaměřit se na nejběžnějších a kritické problémy v projektech C++ podporující Common Language Runtime, včetně potenciální bezpečnostní díry, dojde k chybě aplikace a jiné důležité chyby logiky a návrhu.Měli byste zahrnout tuto sadu pravidel v jakékoli vlastní sadě pravidel, kterou vytvoříte pro vaše projekty C++, které podporují modul CLR (Common Language Runtime).Tato sada pravidel je určena pro nakonfigurování pomocí edice sady Visual Studio Professional a vyšší.

Pravidlo

Description

C6001

Použití neinicializované paměti

C6011

Přesměrování ukazatele Null

C6029

Použití nekontrolované hodnoty

C6031

Vrácená hodnota ignorována

C6053

Nulové ukončení z volání

C6054

Chybějící nulové ukončení

C6059

Chybné zřetězení

C6063

Chybějící argument řetězce ve funkci Format

C6064

Chybějící celočíselný argument ve funkci Format

C6066

Chybějící argument ukazatel ve funkci Format

C6067

Chybějící argument ukazatele na řetězec ve funkci Format

C6101

Vrácení neinicializované paměti

C6200

Index překračuje maximální vyrovnávací paměť

C6201

Index překračuje maximální vyrovnávací paměť zásobníku

C6214

Neplatné přetypování HRESULT na BOOL

C6215

Neplatné přetypování BOOL na HRESULT

C6216

Neplatné přetypování BOOL na HRESULT vložené kompilátorem

C6217

Neplatný test HRESULT s přepínačem NOT

C6220

Neplatné porovnání HRESULT k hodnotě -1

C6226

Neplatné přiřazení HRESULT na -1

C6230

Neplatné použití HRESULT jako typu Boolean

C6235

Nenulová konstanta s logickým NEBO

C6236

Logické NEBO s nenulovou konstantou

C6237

Nula s logickým A ztrácí vedlejší účinky

C6242

Vynucené místní uvolnění

C6248

Vytváření Null DACL

C6250

Nevydané popisovače adres

C6255

Nechráněné použití Alloca

C6258

Použití ukončení vlákna

C6259

Mrtvý kód v přepínači omezeném bitovou operací OR

C6260

Použití bajtové aritmetiky

C6262

Nadměrné použití zásobníku

C6263

Použití Alloca ve smyčce

C6268

Chybějící závorky v přetypování

C6269

Přístup přes ukazatel ignorován

C6270

Chybějící argument typu float ve funkci Format

C6271

Nadbytečný argument ve funkci Format

C6272

Argument, který není typu float, ve funkci Format

C6273

Argument, který není celočíselný, ve funkci Format

C6274

Argument, který není znakem, ve funkci Format

C6276

Neplatné přetypování řetězce

C6277

Neplatné volání CreateProcess

C6278

Neshoda Pole-Nové Skalár-Odstranit

C6279

Neshoda Skalár-Nový Pole-Odstranit

C6280

Neshoda při přidělení-navrácení paměti

C6281

Přednost bitového vztahu

C6282

Přiřazení nahrazuje podmínku

C6283

Neshoda Primitivní pole-Nové Skalár-Odstranit

C6284

Neplatný objektový argument ve funkci Format

C6285

Logické NEBO z konstant

C6286

Nenulové logické NEBO ztrácí vedlejší účinky

C6287

Redundantní test

C6288

Vzájemné zahrnutí přes logické A je hodnoty False

C6289

Vzájemné vyloučení přes logické NEBO je hodnoty True

C6290

Priorita logického NE a bitové operace AND

C6291

Priorita logického NE a bitové operace OR

C6292

Smyčka počítá nahoru z maxima

C6293

Smyčka počítá dolů z minima

C6294

Tělo smyčky není nikdy provedeno

C6295

Nekonečná smyčka

C6296

Smyčka provedena pouze jednou

C6297

Výsledek posunutí přetypován na větší velikost

C6299

Porovnání bitového pole s typem Boolean

C6302

Neplatný argument řetězce znaků ve funkci Format

C6303

Neplatný argument řetězec širokých znaků ve funkci Format

C6305

Neshodné použití velikosti a počtu

C6306

Nesprávné volání funkce s proměnnými argumenty

C6308

Nevrácení Realloc

C6310

Neplatná konstanta filtru výjimky

C6312

Výjimka pokračuje v provádění smyčky

C6314

Priorita bitové operace OR

C6317

Doplněk negace negace

C6318

Výjimka pokračuje v hledání

C6319

Ignorovaný pomocí uvozovky

C6324

Kopírování řetězce namísto porovnání řetězce

C6328

Možná neshoda typu argumentu

C6331

Neplatné příznaky VirtualFree

C6332

Neplatný parametr VirtualFree

C6333

Neplatná velikost VirtualFree

C6335

Nevrácení popisovače procesu

C6381

Chybějící informace o vypnutí

C6383

Přetečení vyrovnávací paměti počtem prvků počtem bajtů

C6384

Dělení velikosti ukazatele

C6385

Přetečení čtení

C6386

Přetečení zápisu

C6387

Neplatná hodnota parametru

C6388

Neplatná hodnota parametru

C6500

Neplatná vlastnost atributu

C6501

Kolidující hodnoty vlastností atributů

C6503

Odkazy nemohou být Null

C6504

Null na neukazatel

C6505

MustCheck na Void

C6506

Velikost vyrovnávací paměti na neukazatel nebo pole

C6507

Neshoda Null na nule přístupné přes ukazatel

C6508

Oprávnění k zápisu na konstantě

C6509

Vrácení použito ve vstupní podmínce

C6510

Ukončení znakem Null na neukazateli

C6511

MustCheck musí být Ano nebo Ne

C6513

Velikost prvku bez velikosti vyrovnávací paměti

C6514

Velikost vyrovnávací paměti překračuje velikost pole

C6515

Velikost vyrovnávací na neukazateli

C6516

Žádné vlastnosti na atributu

C6517

Platná velikost na nečitelné vyrovnávací paměti

C6518

Zapisovatelná velikost na nezapisovatelné vyrovnávací paměti

C6519

Neplatná anotace: hodnota vlastnosti 'NeedsRelease' musí být Ano nebo Ne.

C6521

Neplatný přístup přes ukazatel na velikost řetězce

C6522

Neplatný typ velikosti řetězce

C6523

Neplatný parametr velikosti řetězce

C6525

Neplatné nedostupné umístění velikosti řetězce

C6526

Neplatný typ vyrovnávací paměti velikosti řetězce

C6527

Neplatná anotace: vlastnost NeedsRelease nesmí být použita pro hodnoty typu void.

C6530

Nerozpoznaný styl formátu řetězce

C6540

Použití poznámek s atributy na tuto funkci způsobí zneplatnění všech existujících poznámek __declspec

C6551

Neplatná specifikace velikosti: výraz nelze analyzovat

C6552

Neplatný Deref = nebo Notref =: výraz nelze analyzovat

C6701

Hodnota není platnou hodnotou Ano/Ne/Možná

C6702

Hodnota není hodnota řetězce

C6703

Hodnota není číslo

C6704

Neočekávaná chyba výrazu poznámky

C6705

Očekávaný počet argumentů pro poznámku neodpovídá skutečnému počtu argumentů pro poznámku

C6706

Neočekávaná chyba poznámky pro poznámku

C6995

Uložení XML souboru protokolu se nezdařilo

C26100

Konflikt časování

C26101

Selhání správného použití propojené operace

C26110

Volající selhal při udržení zámku

C26111

Volající selhal při uvolnění zámku

C26112

Volající nemůže držet žádný zámek

C26115

Selhání při uvolnění zámku

C26116

Selhání při získání nebo udržení zámku

C26117

Uvolnění nepotřebného zámku

C26140

Chyba souběžné poznámky SAL

C28020

Výraz není pravdivý pro toto volání

C28021

Parametr popsaný poznámkou musí být ukazatel

C28022

Třídy funkcí této funkce neodpovídají třídám funkcí na typu typedef použitém k jejich definici.

C28023

Přiřazovaná nebo předávaná funkce by měla mít poznámku _Function_class_ pro nejméně jednu ze tříd

C28024

Přiřazovaný ukazatel funkce je popsaný pomocí třídy funkcí, která není obsažena v seznamu tříd funkcí.

C28039

Typ skutečného parametru by měl přesně odpovídat typu

C28112

Proměnná, která je přístupná prostřednictvím funkce Interlocked, musí být vždy přístupná prostřednictvím funkce Interlocked.

C28113

Přistupování k místní proměnné prostřednictvím funkce Interlocked

C28125

Funkce musí být volána v rámci bloku try/except

C28137

Proměnný argument by měl být (literál) konstantou

C28138

Konstantní argument by měl být proměnná

C28159

Zvažte raději použití jiné funkce.

C28160

Poznámka chyby

C28163

Funkce by nikdy neměla být volána v rámci bloku try/except

C28164

Argument je předávaný funkci, která očekává ukazatel na objekt (ne ukazatel na ukazatel)

C28182

Přistupování přes ukazatel NULL.Ukazatel obsahuje stejnou hodnotu NULL jako jiný ukazatel.

C28183

Argument by mohl být jedna hodnota a je kopií hodnoty nalezené v ukazateli

C28193

Proměnná drží hodnotu, která musí být zkontrolována

C28196

Požadavek není splněn. (Výraz není vyhodnocen na hodnotu True.)

C28202

Neplatný odkaz na nestatický člen

C28203

Nejednoznačný odkaz na člen třídy.

C28205

_Success_ nebo _On_failure_ použito v neplatném kontextu

C28206

Zleva struktura operand body, použijte '->"

C28207

Levý operand je struktura, použijte '.'

C28209

Deklarace pro symbol má kolidující deklaraci

C28210

Poznámky pro kontext __on_failure nesmí být v explicitním předkontextu

C28211

Pro SAL_context byl očekáván název statického kontextu

C28212

Pro poznámku byl očekáván výraz ukazatele

C28213

Poznámka _Use_decl_annotations_ musí být použita pro odkazování předchozí deklarace bez úprav.

C28214

Názvy parametrů atributu musí být p1...p9

C28215

Typefix nelze použít na parametr, který již má typefix

C28216

Poznámka checkReturn platí pouze pro následné podmínky pro určitý parametr funkce.

C28217

Počet parametrů poznámky na funkci neodpovídá tomu, který byl nalezen v souboru

C28218

Parametr poznámky pro parametr funkce neodpovídá tomu, který byl nalezen v souboru

C28219

Člen výčtu byl očekáván pro okomentování parametru v poznámce

C28220

Celočíselný výraz byl očekáván pro okomentování parametru v poznámce

C28221

Výraz řetězce byl očekáván pro parametr v poznámce

C28222

Pro poznámku očekávány hodnoty __yes, __no nebo __maybe

C28223

Nebyl nalezen očekávaný Token/identifikátor pro poznámku, parametr

C28224

Poznámka vyžaduje parametry

C28225

Nebyl nalezen správný počet požadovaných parametrů v poznámce

C28226

Poznámka nemůže být také PrimOp (v aktuální deklaraci)

C28227

Poznámka nemůže být také PrimOp (viz předchozí deklarace)

C28228

Parametr poznámky: v poznámkách nelze používat typ

C28229

Poznámka nepodporuje parametry

C28230

Typ parametru nemá žádné členy.

C28231

Poznámka je platná pouze pro pole

C28232

pre, post nebo deref nebyly použity pro ani jednu poznámku

C28233

pre, post nebo deref použity pro blok

C28234

Výraz __at se nevztahuje na aktuální funkci

C28235

Funkce nemůže zůstat sama jako poznámka

C28236

Poznámka nemůže být použita ve výrazu

C28237

Poznámka pro parametr není již nadále podporována

C28238

Poznámka pro parametr má více než jednu value, stringValue nebo longValue.Použijte paramn=xxx

C28239

Poznámka pro parametr má jak value, stringValue a longValue, tak i paramn=xxx.Použijte pouze paramn=xxx

C28240

Poznámka pro parametr obsahuje param2, ale ne param1

C28241

Poznámka pro funkci na parametru není rozpoznána

C28243

Poznámka pro funkci na parametru vyžaduje více přístupů přes ukazatel, než skutečný typ s poznámkou umožňuje

C28244

Poznámka pro funkci má neanalyzovatelnou poznámku parameter/external

C28245

Poznámka pro funkci popisuje 'this' na funkci bez členu

C28246

Poznámka parametru pro funkci neodpovídá typu parametru

C28250

Nekonzistentní poznámka pro funkci: v předchozí instanci došlo k chybě.

C28251

Nekonzistentní poznámka pro funkci: v této instanci došlo k chybě.

C28252

Nekonzistentní poznámka pro funkci: parametr má v této instanci jiné anotace.

C28253

Nekonzistentní poznámka pro funkci: parametr má v této instanci jiné anotace.

C28254

dynamic_cast<>() nepodporuje poznámky

C28262

Ve funkci byla nalezena chyba syntaxe v poznámce

C28263

Chyba syntaxe v podmíněné poznámce byla nalezena pro Vnitřní poznámku

C28264

Výsledné seznamy hodnot musí být konstanty.

C28267

Chyba syntaxe v poznámkách byla nalezena v poznámce pro funkci.

C28272

V poznámce pro funkci je parametr nekonzistentní s deklarací funkce při zkoumání

C28273

Klíče funkce nejsou konzistentní s deklarací funkce

C28275

Parametr _Macro_value_ je null

C28279

Pro symbol byl nalezen 'begin' bez odpovídajícího 'end'

C28280

Pro symbol byl nalezen 'end' bez odpovídajícího 'begin'

C28282

Řetězce formátu musí být ve vstupních podmínkách

C28285

Chyba syntaxe v parametru funkce

C28286

Chyba syntaxe poblíž konce funkce

C28287

Chyba syntaxe v poznámce _At_() pro funkci (název parametru nebyl rozpoznán)

C28288

Chyba syntaxe v poznámce _At_() pro funkci (neplatný název parametru)

C28289

ReadableTo nebo WritableTo pro funkci nemá parametr limit-spec

C28290

Poznámka pro funkci obsahuje více externích typů než skutečný počet parametrů

C28291

Zapsání null/notnull je pro deref na úrovní 0 pro funkci bezvýznamné.

C28300

Operandy výrazu nejsou kompatibilních typů pro operátor

C28301

Žádné poznámky pro první deklaraci funkce.

C28302

Na poznámce byl nalezen nadbytečný operátor _Deref_.

C28303

V poznámce byl nalezen nejednoznačný operátor _Deref_.

C28304

Na token byl nesprávně umístěn operátor _Notref_.

C28305

Byla zjištěna chyba při analýze tokenu.

C28306

Poznámka na parametr je zastaralá

C28307

Poznámka na parametr je zastaralá

C28350

Poznámka popisuje situaci, která není podmíněně použitelná.

C28351

Poznámka popisuje, kde dynamickou hodnotu (proměnnou) nelze v podmínce použít.

CA1001

Typy, které vlastní uvolnitelná pole, by měly být uvolnitelné

CA1009

Deklarujte správně ovladače událostí

CA1016

Označte sestavení pomocí AssemblyVersionAttribute

CA1033

Metody rozhraní by měly být volatelné podřízenými typy

CA1049

Typy, které vlastní nativní prostředky, by měly být uvolnitelné

CA1060

Přesuňte volání nespravovaných kódů do třídy NativeMethods

CA1061

Neskrývejte metody základní třídy

CA1063

Implementuje správně IDisposable

CA1065

Nevyvolávejte výjimky v neočekávaných umístěních

CA1301

Vyhněte se duplicitním akcelerátorům

CA1400

Vstupní body volání nespravovaného kódu by měly existovat

CA1401

Volání nespravovaných kódů by neměla být viditelná

CA1403

Typy automatického rozložení by neměly být viditelné modelu COM

CA1404

Volejte GetLastError ihned po volání nespravovaného kódu

CA1405

Základní typy viditelného typu modelu COM by měly být viditelné modelu COM

CA1410

Metody registrace modelu COM by si měly odpovídat

CA1415

Deklarujte správně volání nespravovaných kódů

CA1821

Odstraňte prázdné finalizační metody

CA1900

Pole hodnotového typu by měla být přenosná

CA1901

Deklarace volání nespravovaného kódu by měla být přenosná

CA2002

Nepoužívejte zámky na objekty se slabou identitou

CA2100

Zkontrolujte dotazy SQL pro chyby zabezpečení

CA2101

Určete zařazování pro argumenty řetězce volání nespravovaného kódu

CA2108

Zkontrolujte deklarativní zabezpečení na hodnotových typech

CA2111

Ukazatele by neměly být viditelné

CA2112

Zabezpečené typy by neměly vystavovat pole

CA2114

Zabezpečení metody by mělo být nadmnožinou typu

CA2116

Metody APTCA by měly volat pouze metody APTCA

CA2117

Typy APTCA by měly rozšiřovat pouze základní typy APTCA

CA2122

Nezveřejňujte nepřímo metody s požadavky propojení

CA2123

Požadavky odkazu přepisu by měly být shodné se základem

CA2124

Zabalte ohrožené klauzule finally do vnějšího bloku try

CA2126

Požadavky propojení typů vyžadují požadavky dědičnosti

CA2131

Důležité typy zabezpečení se nemusí účastnit rovnocennosti typu

CA2132

Výchozí konstruktory musí být alespoň tak kritické jako výchozí konstruktory základního typu

CA2133

Delegáti musí navázat na metody s konzistentní transparentností

CA2134

Metody musí při přepisu základních metod zachovat konzistentní transparentnost

CA2137

Transparentní metody musí obsahovat pouze ověřitelné IL

CA2138

Transparentní metody nesmí volat metody s atributem SuppressUnmanagedCodeSecurity

CA2140

Transparentní kód nesmí odkazovat na důležité položky zabezpečení

CA2141

Transparentní metody nesmí splňovat LinkDemands

CA2146

Typy musí být alespoň tak kritické jako jejich rozhraní a základní typy

CA2147

Transparentní metody nemohou používat bezpečnostní vyhodnocení

CA2149

Transparentní metody nesmí volat do nativního kódu

CA2200

Znovu vyvolejte výjimku pro zachování podrobností zásobníku

CA2202

Neuvolňujte objekty několikrát

CA2207

Statická pole hodnotového typu inicializujte vloženým kódem

CA2212

Neoznačujte obsluhované komponenty pomocí WebMethod

CA2213

Uvolnitelná pole by měla být uvolněna

CA2214

Nevolejte přepisovatelné metody v konstruktorech

CA2216

Uvolnitelné typy by měly deklarovat finalizační metodu

CA2220

Finalizační metody by měly volat finalizační metodu základní třídy

CA2229

Implementujte konstruktory serializace

CA2231

Je třeba přetížit operátor rovnosti při přetížení ValueType.Equals

CA2232

Označte vstupní body modelu Windows Forms pomocí STAThread

CA2235

Označte všechna neserializovatelná pole

CA2236

Volejte metody základní třídy na typech ISerializable

CA2237

Označte typy ISerializable pomocí SerializableAttribute

CA2238

Implementujte správně metody serializace

CA2240

Implementujte správně rozhraní ISerializable

CA2241

Poskytněte správné argumenty metodám formátování

CA2242

Testujte správně hodnotu NaN