Sdílet prostřednictvím


Upozornění kompilátoru, která jsou ve výchozím nastavení vypnutá

Kompilátor podporuje upozornění, která jsou ve výchozím nastavení vypnutá, protože většina vývojářů je nenajde užitečně. V některýchpřípadechch Další upozornění se týkají použití rozšíření Microsoftu pro jazyk. Některá upozornění označují oblast, ve které programátoři často dělají nesprávné předpoklady, což může vést k neočekávanému nebo nedefinovanýmu chování. Pokud jsou všechna tato upozornění povolená, některé z nich se můžou v hlavičce knihovny objevit mnohokrát. Knihovny modulu runtime jazyka C a standardní knihovny jazyka C++ mají generovat žádná upozornění pouze na úrovni /W4upozornění .

Povolení upozornění, která jsou ve výchozím nastavení vypnutá

Upozornění, která jsou ve výchozím nastavení normálně vypnutá, můžete povolit pomocí jedné z následujících možností:

  • #pragma warning(default : warning_number )

    Zadané upozornění (warning_number) je povolené na výchozí úrovni. Dokumentace pro upozornění obsahuje výchozí úroveň upozornění.

  • #pragma warning( : warning_level warning_number )

    Zadané upozornění (warning_number) je povoleno na zadané úrovni (warning_level).

  • /Wall

    /Wall povolí všechna upozornění, která jsou ve výchozím nastavení vypnutá. Pokud použijete tuto možnost, můžete pomocí této /wd možnosti vypnout jednotlivá upozornění.

  • /wLnnnn

    Tato možnost povolí upozornění nnnn na úrovni L.

Upozornění, která jsou ve výchozím nastavení vypnutá

Visual Studio 2015 a novější verze

V sadě Visual Studio 2015 a novějších verzích jsou ve výchozím nastavení vypnutá následující upozornění:

Upozorňující Zpráva
C4061 (úroveň 4) Enumerator 'identifier' in a switch of enum 'enumeration' is not explicit handled by a case label.
C4062 (úroveň 4) Enumerator 'identifier' in a switch of enum 'enumeration' is not handled.
C4165 (úroveň 1) HrESULT se převádí na bool; Jste si jistí, že to je to, co chcete?
C4191 (úroveň 3) "operator": nebezpečný převod z "type_of_expression" na "type_required"
C4242 (úroveň 4) 'identifikátor': převod z 'type1' na 'type2', možné ztráty dat
C4254 (úroveň 4) 'operator': conversion from 'type1' to 'type2', possible loss of data
C4255 (úroveň 4) 'function': není zadaný žádný prototyp funkce: převod '()' na '(void)'
C4263 (úroveň 4) 'function': Členová funkce nepřepíše žádnou virtuální členskou funkci základní třídy.
C4264 (úroveň 1) 'virtual_function': Není k dispozici žádné přepsání pro virtuální členskou funkci ze základní třídy; funkce je skryta.
C4265 (úroveň 3) 'class': třída má virtuální funkce, ale destruktor není virtuální.
C4266 (úroveň 4) 'function': pro virtuální členskou funkci není k dispozici žádné přepsání ze základního typu; funkce je skrytá.
C4287 (úroveň 3) 'operator': unsigned/negative constant mismatch
C4289 (úroveň 4) Nestandardní rozšíření použité : 'var' : řídicí proměnná smyčky deklarovaná ve smyčce for-loop se používá mimo obor smyčky for-loop.
C4296 (úroveň 4) 'operator': výraz je vždy false
C4339 (úroveň 4) 'type' : použití nedefinovaného typu zjištěného v meta-datech CLR – použití tohoto typu může vést k výjimce modulu runtime.
C4342 (úroveň 1) změna chování: "funkce" volala, ale operátor člena byl volána v předchozích verzích.
C4350 (úroveň 1) změna chování: "member1" volal místo "member2"
C4355 'this' : použito v inicializačním seznamu základních členů
C4365 (úroveň 4) "action": převod z "type_1" na "type_2", neshoda se znaménky nebo bez znaménka
C4370 (úroveň 3) došlo ke změně rozložení třídy z předchozí verze kompilátoru z důvodu lepšího balení
C4371 (úroveň 3) 'class-name': rozložení třídy se mohlo změnit z předchozí verze kompilátoru kvůli lepšímu balení člena 'member'
C4388 (úroveň 4) neshoda se znaménkem, nebo bez znaménka
C4412 (úroveň 2) 'function': podpis funkce obsahuje typ 'type'; Objekty C++ jsou nebezpečné pro předávání mezi čistým kódem a smíšeným nebo nativním kódem.
C4426 (úroveň 1) příznak optimalizace se po zahrnutí hlavičky změnil kvůli #pragma optimize() 14.1
C4435 (úroveň 4) 'class1' : Rozložení objektu v /vd2 se změní kvůli virtuální základní třídě 2.
C4437 (úroveň 4) dynamic_cast z virtuální základní třídy class1 do třídy 2 může v některých kontextech selhat.
C4444 (úroveň 3) nejvyšší úroveň __unaligned není v tomto kontextu implementována.
C4464 (úroveň 4) relativní cesta k zahrnutí obsahuje ".".
C4471 (úroveň 4) forward deklarace unscoped výčtu musí mít základní typ (int assumed) Perm
C4472 (úroveň 1) Identifikátor je nativní výčet: přidání specifikátoru přístupu (private/public) pro deklaraci spravovaného výčtu
C4514 (úroveň 4) 'function': Neodkazovaná vložená funkce byla odebrána.
C4536 (úroveň 4) 'název typu': název typu překračuje limit meta-dat znaky limitu
C4545 (úroveň 1) výraz před čárkou vyhodnocuje na funkci, která nemá k dispozici seznam argumentů
C4546 (úroveň 1) volání funkce před čárkou nemá seznamu argumentů
C4547 (úroveň 1) "operator": operátor před čárkou nemá žádný účinek; očekávaný operátor s vedlejším účinkem
C4548 (úroveň 1) výraz před čárkou nemá žádný vliv; očekávaný výraz s vedlejším účinkem
C4549 (úroveň 1) "operator1": operátor před čárkou nemá žádný účinek; máte v úmyslu operátor 2?
C4555 (úroveň 1) výraz nemá žádný vliv; očekávaný výraz s vedlejším účinkem
C4557 (úroveň 3) "__assume" obsahuje efekt "effect"
C4571 (úroveň 4) informační: sémantika catch(...) se od verze Visual C++ 7.1 změnila; strukturované výjimky (SEH) se už nezachytí
C4574 (úroveň 4) Identifikátor je definován jako "0": chtěli jste použít identifikátor #if?
C4577 (úroveň 1) 'noexcept' použito bez zadaného režimu zpracování výjimek; ukončení výjimky není zaručeno. Specifikovat /EHsc
C4582 (úroveň 4) 'type': konstruktor není implicitně volána
C4583 (úroveň 4) 'type': destruktor není implicitně volána
C4587 (úroveň 1) 'anonymous_structure': změna chování: konstruktor již není implicitně volána
C4588 (úroveň 1) 'anonymous_structure': změna chování: destruktor již není implicitně volána
C4596 (úroveň 4) 'identifikátor': neplatný kvalifikovaný název v deklaraci člena 14.3 Perm
C4598 (úroveň 1 a úroveň 3) '#include "header": číslo záhlaví záhlaví v předkompilované hlavičce neodpovídá aktuální kompilaci na této pozici 14.3
C4599 (úroveň 3) 'option path': Číslo argumentu příkazového řádku arg_number neodpovídá předkompilované hlavičce 14.3
C4605 (úroveň 1) Makro /D zadané na aktuálním příkazovém řádku, ale nebylo zadáno při sestavení předkompilované hlavičky.
C4608 (úroveň 3) "union_member" již inicializoval jiný člen sjednocení v seznamu inicializátorů , "union_member" Perm
C4619 (úroveň 3) #pragma upozornění: neexistuje žádné číslo upozornění "číslo".
C4623 (úroveň 4) 'derived class': výchozí konstruktor nelze generovat, protože výchozí konstruktor základní třídy je nedostupný
C4625 (úroveň 4) 'derived class': kopírovací konstruktor nelze generovat, protože kopírovací konstruktor základní třídy je nedostupný
C4626 (úroveň 4) 'derived class': operátor přiřazení nelze generovat, protože operátor přiřazení základní třídy je nedostupný
C4628 (úroveň 1) spřežky nejsou podporovány se -Ze. Sekvence znaků "digraph" není interpretována jako alternativní token pro znak
C4640 (úroveň 3) "instance": Konstrukce místního statického objektu není bezpečná pro přístup z více vláken.
C4643 (úroveň 4) Předávání deklarací identifikátoru v oboru názvů std není povoleno standardem C++. 15.8
C4647 (úroveň 3) změna chování: __is_pod(typ) má v předchozích verzích jinou hodnotu.
C4654 (úroveň 4) Kód umístěný před zahrnutím předkompilovaného řádku záhlaví bude ignorován. Přidejte kód do předkompilované hlavičky. 14.1
C4668 (úroveň 4) Symbol není definován jako makro preprocesoru, přičemž místo "0" pro "direktivy"
C4682 (úroveň 4) 'symbol' : nebyl zadán žádný směrový atribut parametru, výchozí hodnota [in]
C4686 (úroveň 3) 'uživatelem definovaný typ': možné změny chování, změna v konvenci volání UDT return
C4692 (úroveň 1) 'function': Podpis nesoukromého členu obsahuje privátní nativní typ sestavení "native_type"
C4710 (úroveň 4) 'function': funkce není vložena.
C4738 (úroveň 3) ukládání 32bitového plovoucího výsledku do paměti, možná ztráta
C4746 volatilní přístup výrazu podléhá nastavení /volatile:<iso|ms>; zvažte použití vnitřních funkcí __iso_volatile_load/store.
C4749 (úroveň 4) podmíněně podporováno: posun použitý u nestandardního typu rozložení type 'type'
C4767 (úroveň 4) název oddílu "symbol" je delší než 8 znaků a linker ho zkrátí.
C4774 (úroveň 4) 'string' : formátovací řetězec očekávaný v argumentu číslo není řetězcový literál.
C4777 (úroveň 4) 'function' : formátovací řetězec 'string' vyžaduje argument typu 'type1', ale číslo argumentu variadic má typ 'type2'.
C4786 (úroveň 3) Symbol: Název objektu byl zkrácen na znaky number v informacích o ladění.
C4800 (úroveň 4) Implicitní převod z 'type' na log. Možná ztráta informací 16.0
C4820 (úroveň 4) Bajty odsazení bajtů přidané za konstruktor member_name
C4822 (úroveň 1) 'member': Funkce člena místní třídy nemá tělo
C4826 (úroveň 2) Převod z 'type1' na 'type2' je prodloužen podepis. To může způsobit neočekávané chování modulu runtime.
C4837 (úroveň 4) zjištěna trigraf: znak?? nahrazen znakem
C4841 (úroveň 4) Použité nestandardní rozšíření: složený členový designátor použitý v posunu
C4842 (úroveň 4) výsledek posunu použitého u typu používajícího více dědičnosti není zaručeno, že bude konzistentní mezi verzemi kompilátoru.
C4866 (úroveň 4) Kompilátor 'file(line-number)' nemusí vynucovat pořadí vyhodnocení zleva doprava pro operátor volání
C4868 (úroveň 4) Kompilátor file(line_number) nemusí vynutit pořadí vyhodnocení zleva doprava v seznamu inicializace složených závorek.
C4905 (úroveň 1) široký řetězcový literál přetypován na 'LPSTR'
C4906 (úroveň 1) řetězcový literál přetypován na 'LPWSTR'
C4917 (úroveň 1) 'deklarátor': IDENTIFIKÁTOR GUID může být přidružen pouze ke třídě, rozhraní nebo oboru názvů.
C4928 (úroveň 1) nelegální inicializace kopírování; implicitně použit více než jeden uživatelem definovaný převod
C4931 (úroveň 4) Předpokládáme, že knihovna typů byla sestavena pro ukazatele počtu bitů.
C4946 (úroveň 1) reinterpret_cast použitá mezi souvisejícími třídami: class1 a class2
C4962 'function': Optimalizace řízené profilem jsou zakázané, protože optimalizace způsobily nekonzistentní data profilu.
C4986 (úroveň 4) 'symbol': Specifikace výjimky neodpovídá předchozí deklaraci.
C4987 (úroveň 4) použito nestandardní rozšíření: 'throw (...)'
C4988 (úroveň 4) 'symbol': proměnná deklarovaná mimo obor třídy nebo funkce
C5022 'type': zadaných více konstruktorů přesunutí
C5023 'type': zadané operátory přiřazení více přesunutí
C5024 (úroveň 4) 'type': konstruktor move byl implicitně definován jako odstraněný.
C5025 (úroveň 4) 'type': Operátor přiřazení přesunutí byl implicitně definován jako odstraněný.
C5026 (úroveň 1 a úroveň 4) 'type': konstruktor move byl implicitně definován jako odstraněný.
C5027 (úroveň 1 a úroveň 4) 'type': Operátor přiřazení přesunutí byl implicitně definován jako odstraněný.
C5029 (úroveň 4) Použité nestandardní rozšíření: atributy zarovnání v jazyce C++ se vztahují pouze na proměnné, datové členy a typy značek.
C5031 (úroveň 4) #pragma warning(pop): pravděpodobná neshoda, stav upozornění nasdílený v jiném souboru 14.1
C5032 (úroveň 4) zjistila #pragma warning(push) bez odpovídajícího upozornění #pragma (pop) 14.1

Visual Studio 2017 a novější verze

Následující upozornění jsou ve výchozím nastavení v sadě Visual Studio 2017 a novějších verzích vypnutá:

Upozorňující Zpráva
C5034 použití vnitřní vnitřní "vnitřní" způsobí, že se název funkce zkompiluje jako kód hosta 15.3.
C5035 použití funkce "feature" způsobí , že se název funkce zkompiluje jako kód hosta 15.3.
C5036 (úroveň 1) Převod ukazatele funkce varargs při kompilaci pomocí /hybrid:x86arm64 'type1' na 'type2' 15.3
C5038 (úroveň 4) datový člen member 'member1' bude inicializován po členu dat 'member2' 15.3
C5039 (úroveň 4) 'function': ukazatel nebo odkaz na potenciálně vyvolání funkce předané extern funkci C pod .-EHc Nedefinované chování může nastat, pokud tato funkce vyvolá výjimku. 15.5
C5041 (úroveň 4) 'member-name': Definice mimo řádek pro statický datový člen constexpr není nutná a je v jazyce C++17 zastaralá. 15.2
C5042 (úroveň 3) 'function': Deklarace funkcí v oboru bloku nelze zadat inline ve standardním jazyce C++; odeberte specifikátor inline 15.5.
C5045 Kompilátor vloží zmírnění rizika spectre pro načtení paměti, pokud je zadaný přepínač /Qspectre zadaný 15.7.

Visual Studio 2019 a novější verze

Následující upozornění jsou ve výchozím nastavení v sadě Visual Studio 2019 a novějších verzích vypnutá:

Upozorňující Zpráva
C5052 (úroveň 3) Klíčové slovo "keyword-name" bylo zavedeno ve verzi jazyka C++ a vyžaduje použití možnosti příkazového řádku 16.1
C5204 (úroveň 3) Třída s virtuálními funkcemi má nevirtuální triviální destruktor. 16.5
C5214 (úroveň 4) Použití klíčového slova na operand s těkavým kvalifikovaným typem je v jazyce C++20 16.7 zastaralé
C5215 (úroveň 4) Parametr funkce s těkavým kvalifikovaným typem je v jazyce C++20 16.7 zastaralý.
C5216 (úroveň 4) Return-type je v C++20 16.7 zastaralý kvalifikovaný návratový typ.
C5217 (úroveň 4) Deklarace strukturované vazby, která obsahuje nestálou, je v jazyce C++20 16.7 zastaralá.
C5219 (úroveň 2) implicitní převod z 'type-1' na 'type-2', možné ztráty dat 16.7
C5220 (úroveň 4) "member": nestatický datový člen s těkavým kvalifikovaným typem již neznamená, že
Kompilátor generovaný konstruktory copy/move a operátory přiřazení copy/move nejsou triviální 16.7
C5233 (úroveň 4) Explicitní zachytávání lambda identifikátor se nepoužívá 16.10.
C5240 (úroveň 4) 'attribute-name': atribut je ignorován v této syntaktické pozici 16.10
C5243 (úroveň 1) 'type-name': Použití neúplné třídy class-name může způsobit potenciální porušení pravidla definice kvůli omezení ABI 16.10
C5245 (úroveň 4) 'function': Neodkazovaná funkce s interním propojením byla odebrána.
C5246 (úroveň 1) 'member': Inicializace podobjektu by měla být zabalena do složených závorek 16.10
C5247 (úroveň 1) Oddíl section 'section-name' je vyhrazený pro dynamickou inicializaci jazyka C++. Ruční vytvoření oddílu ovlivní dynamickou inicializaci jazyka C++ a může vést k nedefinované chování 16.11.
C5248 (úroveň 1) Oddíl section 'section-name' je vyhrazený pro dynamickou inicializaci jazyka C++. Proměnná ručně vložená do oddílu může být optimalizovaná a její pořadí vzhledem ke generování dynamických inicializátorů kompilátoru není zadané 16.11.

Visual Studio 2022 a novější verze

Následující upozornění jsou ve výchozím nastavení v sadě Visual Studio 2022 a novějších verzích vypnutá:

Upozorňující Zpráva
C5249 (úroveň 1) Bitfield typu enumeration_name má pojmenované enumerátory s hodnotami, které nelze reprezentovat v dané šířce bitového pole bitfield_width. 17.0
C5250 (úroveň 3) "function_name": vnitřní funkce není deklarována. 17.0
C5251 (úroveň 4) Název segmentu se po zahrnutí hlavičky 17.1 změnil
C5254 (úroveň 4) Funkce jazyka terse static assert vyžaduje příznak kompilátoru /std:c++17 17.1
C5256 (úroveň 1) 'výčet': Nedefinující deklarace výčtu s pevným základním typem je povolena pouze jako samostatná deklarace 17.2.
C5258 (úroveň 4) Explicitní zachycení symbolu není pro toto použití 17.2 vyžadováno.
C5259 (úroveň 4) 'special-type': explicitní specializace vyžaduje 'template <>' 17.3
C5262 (úroveň 1, chyba) implicitní pád se zde vyskytuje; Chybí break vám příkaz? Použití [[fallthrough]] , break pokud je příkaz záměrně vynechán mezi případy 17.4
C5263 (úroveň 4) volání 'std::move' u dočasného objektu zabraňuje elizi kopírování 17.4
C5264 (úroveň 4) Proměnná -name: Proměnná const se nepoužívá 17.4.
C5266 (úroveň 4) Kvalifikátor const pro návratový typ nemá žádný účinek 17,6
C5267 (úroveň 4) definice implicitního konstruktoru kopírování/operátoru přiřazení pro 'type' je zastaralá, protože má operátor přiřazení zadaný uživatelem / konstruktor copy 17.7

14.1 Toto upozornění je dostupné od verze Visual Studio 2015 Update 1.
14.3 Toto upozornění je k dispozici od sady Visual Studio 2015 Update 3.
15.2 Toto upozornění je dostupné od sady Visual Studio 2017 verze 15.2.
15.3 Toto upozornění je dostupné od sady Visual Studio 2017 verze 15.3.
15.5 Toto upozornění je dostupné od sady Visual Studio 2017 verze 15.5.
15.7 Toto upozornění je k dispozici od sady Visual Studio 2017 verze 15.7.
15.8 Toto upozornění je k dispozici od sady Visual Studio 2017 verze 15.8.
16.0 Toto upozornění je k dispozici od sady Visual Studio 2019 RTM.
16.5 Toto upozornění je k dispozici od sady Visual Studio 2019 verze 16.5.
16.7 Toto upozornění je k dispozici od sady Visual Studio 2019 verze 16.7.
16.10 Toto upozornění je k dispozici od sady Visual Studio 2019 verze 16.10.
16.11 Toto upozornění je k dispozici od sady Visual Studio 2019 verze 16.11.
17.0 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.0.
17.1 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.1.
17.2 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.2.
17.3 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.3.
17.4 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.4.
17.5 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.5.
17.6 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.6.
17.7 Toto upozornění je k dispozici od sady Visual Studio 2022 verze 17.7.
Perm Toto upozornění je vypnuto, pokud není nastavena možnost kompilátoru /permissive- .

Upozornění jsou ve výchozím nastavení vypnutá ve starších verzích.

Toto upozornění bylo ve výchozím nastavení vypnuté v sadě Visual Studio 2015 verze 15.3 a povoleno v sadě Visual Studio 2015 verze 15.5:

Upozorňující Zpráva
C4768 __declspec atributy před specifikací propojení se ignorují.

Tato upozornění byla ve výchozím nastavení vypnutá ve verzích kompilátoru před sadou Visual Studio 2015:

Upozorňující Zpráva
C4302 (úroveň 2) 'conversion': zkrácení z 'type1' na 'type2'
C4311 (úroveň 1) 'variable': zkrácení ukazatele z 'type' na 'type'
C4312 (úroveň 1) "operation": převod z "type1" na "type2" větší velikosti
C4319 (úroveň 1) "operator": nula rozšiřující "type1" na "type2" větší velikosti

Toto upozornění bylo ve výchozím nastavení vypnuto ve verzích kompilátoru před sadou Visual Studio 2012:

Upozorňující Zpráva
C4431 (úroveň 4) chybějící specifikátor typu: předpokládá se int Poznámka: C již nepodporuje výchozí int.

Viz také

warning direktiva pragma