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 /W4
upozorně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
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í. -
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. |