Dokumentacja podstawowego narzędzia do sprawdzania wytycznych języka C++

W tej sekcji wymieniono ostrzeżenia narzędzia sprawdzania wytycznych podstawowych języka C++. Aby uzyskać informacje o analizie kodu, zobacz /analyze (Analiza kodu) i Szybki start: analiza kodu dla języka C/C++.

Uwaga

Niektóre ostrzeżenia należą do więcej niż jednej grupy, a nie wszystkie ostrzeżenia zawierają pełny temat referencyjny.

grupa OWNER_POINTER

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT
Zwróć obiekt o określonym zakresie zamiast przydzielonego sterta, jeśli ma konstruktor przenoszenia. Zobacz Podstawowe wytyczne języka C++ R.3.

C26403 RESET_OR_DELETE_OWNER
Zresetuj lub jawnie usuń wskaźnik T> właściciela<"zmienna". Zobacz Podstawowe wytyczne języka C++ R.3.

C26404 DONT_DELETE_INVALID
Nie usuwaj właściciela<T> , który może być w nieprawidłowym stanie. Zobacz Podstawowe wytyczne języka C++ R.3.

C26405 DONT_ASSIGN_TO_VALID
Nie przypisuj do właściciela<T> , który może być w prawidłowym stanie. Zobacz Podstawowe wytyczne języka C++ R.3.

C26406 DONT_ASSIGN_RAW_TO_OWNER
Nie przypisuj nieprzetworzonego wskaźnika do właściciela<T>. Zobacz Podstawowe wytyczne języka C++ R.3.

C26407 DONT_HEAP_ALLOCATE_UNNECESSARILY
Preferuj obiekty o określonym zakresie, nie przydzielaj sterty niepotrzebnie. Zobacz Podstawowe wytyczne języka C++ R.5.

C26429 USE_NOTNULL
Symbol "symbol" nigdy nie jest testowany pod kątem wartości null, można go oznaczyć jako not_null. Zobacz Podstawowe wytyczne dotyczące języka C++ F.23.

C26430 TEST_ON_ALL_PATHS
Symbol "symbol" nie jest testowany pod kątem wartości null we wszystkich ścieżkach. Zobacz Podstawowe wytyczne dotyczące języka C++ F.23.

C26431 DONT_TEST_NOTNULL
Typ wyrażenia "wyrażenie" jest już gsl::not_null. Nie testuj go pod kątem wartości null. Zobacz Podstawowe wytyczne dotyczące języka C++ F.23.

grupa RAW_POINTER

C26400 NO_RAW_POINTER_ASSIGNMENT
Nie przypisuj wyniku alokacji lub wywołania funkcji z wartością zwracaną przez właściciela<T> do nieprzetworzonego wskaźnika; zamiast tego użyj właściciela<T> . Zobacz Podstawowe wytyczne dotyczące języka C++ I.11.

C26401 DONT_DELETE_NON_OWNER
Nie usuwaj nieprzetworzonego wskaźnika, który nie jest właścicielem<T>. Zobacz Podstawowe wytyczne dotyczące języka C++ I.11.

C26402 DONT_HEAP_ALLOCATE_MOVABLE_RESULT
Zwróć obiekt o określonym zakresie zamiast przydzielonego sterta, jeśli ma konstruktor przenoszenia. Zobacz Podstawowe wytyczne języka C++ R.3.

C26408 NO_MALLOC_FREE
Unikaj malloc() i free(), preferuj nową wersję nothrow z usunięciem. Zobacz Podstawowe wytyczne dotyczące języka C++ R.10.

C26409 NO_NEW_DELETE
Unikaj jawnego wywoływania nowych i usuwania, zamiast tego użyj polecenia std::make_unique<T> . Zobacz Podstawowe wytyczne języka C++ R.11.

C26429 USE_NOTNULL
Symbol "symbol" nigdy nie jest testowany pod kątem wartości null, można go oznaczyć jako not_null. Zobacz Podstawowe wytyczne dotyczące języka C++ F.23.

C26430 TEST_ON_ALL_PATHS
Symbol "symbol" nie jest testowany pod kątem wartości null we wszystkich ścieżkach. Zobacz Podstawowe wytyczne dotyczące języka C++ F.23.

C26431 DONT_TEST_NOTNULL
Typ wyrażenia "wyrażenie" jest już gsl::not_null. Nie testuj go pod kątem wartości null. Zobacz Podstawowe wytyczne dotyczące języka C++ F.23.

C26481 NO_POINTER_ARITHMETIC
Nie używaj arytmetyki wskaźnika. Zamiast tego użyj zakresu. Zobacz Podstawowe wskazówki dotyczące języka C++ Bounds.1.

C26485 NO_ARRAY_TO_POINTER_DECAY
Wyrażenie "wyrażenie": brak tablicy do rozkładu wskaźnika. Zobacz Podstawowe wskazówki dotyczące języka C++ Bounds.3.

grupa UNIQUE_POINTER

C26410 NO_REF_TO_CONST_UNIQUE_PTR
Parametr "parameter" jest odwołaniem do const unikatowego wskaźnika, zamiast tego użyj const T* lub const T&. Zobacz Podstawowe wytyczne dotyczące języka C++ R.32.

C26411 NO_REF_TO_UNIQUE_PTR
Parametr "parametr" jest odwołaniem do unikatowego wskaźnika i nigdy nie jest ponownie przypisywany lub resetowany, zamiast tego należy użyć języka T* lub T&. Zobacz Podstawowe wytyczne dotyczące języka C++ R.33.

C26414 RESET_LOCAL_SMART_PTR
Przenoszenie, kopiowanie, ponowne przypisywanie lub resetowanie lokalnego inteligentnego wskaźnika "symbol". Zobacz Podstawowe wytyczne języka C++ R.5.

C26415 SMART_PTR_NOT_NEEDED
Inteligentny wskaźnik parametru "symbol" jest używany tylko do uzyskiwania dostępu do zawartego wskaźnika. Zamiast tego użyj języka T* lub T&. Zobacz Podstawowe wytyczne dotyczące języka C++ R.30.

grupa SHARED_POINTER

C26414 RESET_LOCAL_SMART_PTR
Przenoszenie, kopiowanie, ponowne przypisywanie lub resetowanie lokalnego inteligentnego wskaźnika "symbol". Zobacz Podstawowe wytyczne języka C++ R.5.

C26415 SMART_PTR_NOT_NEEDED
Inteligentny wskaźnik parametru "symbol" jest używany tylko do uzyskiwania dostępu do zawartego wskaźnika. Zamiast tego użyj języka T* lub T&. Zobacz Podstawowe wytyczne dotyczące języka C++ R.30.

C26416 NO_RVALUE_REF_SHARED_PTR
Współużytkowany parametr wskaźnika "symbol" jest przekazywany przez odwołanie rvalue. Zamiast tego przekaż wartość. Zobacz Podstawowe wytyczne dotyczące języka C++ R.34.

C26417 NO_LVALUE_REF_SHARED_PTR
Współużytkowany parametr wskaźnika "symbol" jest przekazywany przez odwołanie i nie jest resetowany lub ponownie przypisywany. Zamiast tego użyj języka T* lub T&. Zobacz Podstawowe wytyczne dotyczące języka C++ R.35.

C26418 NO_VALUE_OR_CONST_REF_SHARED_PTR
Współużytkowany parametr wskaźnika "symbol" nie jest kopiowany ani przenoszony. Zamiast tego użyj języka T* lub T&. Zobacz Podstawowe wytyczne dotyczące języka C++ R.36.

GRUPA DEKLARACJI

C26426 NO_GLOBAL_INIT_CALLS
Inicjator globalny wywołuje funkcję inną niż constexpr "symbol". Zobacz Podstawowe wytyczne dotyczące języka C++ I.22.

C26427 NO_GLOBAL_INIT_EXTERNS
Globalny inicjator uzyskuje dostęp do obiektu extern "symbol". Zobacz Podstawowe wytyczne dotyczące języka C++ I.22.

C26444 NO_UNNAMED_RAII_OBJECTS
Unikaj nienazwanych obiektów z niestandardową konstrukcją i zniszczeniem. Zobacz ES.84: Nie (spróbuj) zadeklarować zmiennej lokalnej bez nazwy.

Grupa KLAS

C26432 DEFINE_OR_DELETE_SPECIAL_OPS
Jeśli zdefiniujesz lub usuniesz dowolną operację domyślną w typie "symbol", zdefiniuj lub usuń je wszystkie. Zobacz C++ Core Guidelines C.21 (Wytyczne podstawowe języka C++21).

C26433 OVERRIDE_EXPLICITLY
Funkcja "symbol" powinna być oznaczona znakiem "override". Zobacz C.128: Funkcje wirtualne powinny określać dokładnie jedną z wirtualnych, przesłonięć lub finalnych.

C26434 DONT_HIDE_METHODS
Funkcja "symbol_1" ukrywa funkcję niewirtuacyjną "symbol_2". Zobacz C++ Core Guidelines C.128 (Wytyczne podstawowe języka C++128).

C26435 SINGLE_VIRTUAL_SPECIFICATION
Funkcja "symbol" powinna określać dokładnie jedną z wartości "virtual", "override" lub "final". Zobacz C.128: Funkcje wirtualne powinny określać dokładnie jedną z wirtualnych, przesłonięć lub finalnych.

C26436 NEED_VIRTUAL_DTOR
Typ "symbol" z funkcją wirtualną wymaga publicznego wirtualnego lub chronionego destruktora innego niż wirtualny. Zobacz C++ Core Guidelines C.35 (Podstawowe wytyczne języka C++35).

C26443 NO_EXPLICIT_DTOR_OVERRIDE
Zastępowanie destruktora nie powinno używać jawnych specyfikatorów "przesłonięcia" ani "wirtualnego". Zobacz C.128: Funkcje wirtualne powinny określać dokładnie jedną z wirtualnych, przesłonięć lub finalnych.

Grupa STYLÓW

C26438 NO_GOTO
Unikaj goto. Zobacz Podstawowe wytyczne dotyczące języka C++ ES.76.

Grupa FUNKCJI

C26439 SPECIAL_NOEXCEPT
Tego rodzaju funkcja może nie zostać wyrzucona. Zadeklaruj go noexcept. Zobacz Podstawowe wytyczne dotyczące języka C++ F.6.

C26440 DECLARE_NOEXCEPT
Funkcję "symbol" można zadeklarować .noexcept Zobacz Podstawowe wytyczne dotyczące języka C++ F.6.

C26447 DONT_THROW_IN_NOEXCEPT
Funkcja jest zadeklarowana noexcept , ale wywołuje funkcję, która może zgłaszać wyjątki. Zobacz Podstawowe wytyczne języka C++: F.6: Jeśli funkcja może nie zgłaszać, zadeklaruj ją bez wyjątku.

GRUPA WSPÓŁBIEŻNOŚCI

C26441 NO_UNNAMED_GUARDS
Obiekty straży muszą być nazwane. Zobacz Podstawowe wytyczne dotyczące języka C++ cp.44.

GRUPA CONST

C26460 USE_CONST_REFERENCE_ARGUMENTS
Argument odwołania "argument" funkcji "function" można oznaczyć jako const. Zobacz Wytyczne podstawowe języka C++ con.3.

USE_CONST_POINTER_ARGUMENTS C26461:
Argument wskaźnika "argument" dla funkcji "function" można oznaczyć jako wskaźnik na const. Zobacz Wytyczne podstawowe języka C++ con.3.

C26462 USE_CONST_POINTER_FOR_VARIABLE
Wartość wskazywana przez zmienną jest przypisywana tylko raz, oznaczając ją jako wskaźnik na const. Zobacz Podstawowe wytyczne dotyczące języka C++ con.4.

C26463 USE_CONST_FOR_ELEMENTS
Elementy tablicy "array" są przypisywane tylko raz, oznaczanie elementów const. Zobacz Podstawowe wytyczne dotyczące języka C++ con.4.

C26464 USE_CONST_POINTER_FOR_ELEMENTS
Wartości wskazywane przez elementy tablicy "array" są przypisywane tylko raz, oznaczając elementy jako wskaźnik do const. Zobacz Podstawowe wytyczne dotyczące języka C++ con.4.

C26496 USE_CONST_FOR_VARIABLE
Zmienna "zmienna" jest przypisywana tylko raz, oznaczać ją jako const. Zobacz Podstawowe wytyczne dotyczące języka C++ con.4.

C26497 USE_CONSTEXPR_FOR_FUNCTION
Ta funkcja może być oznaczonaconstexpr, jeśli wymagana jest ocena czasu kompilacji. Zobacz Podstawowe wytyczne dotyczące języka C++ F.4.

C26498 USE_CONSTEXPR_FOR_FUNCTIONCALL
Ta funkcja wywołania funkcji może użyćconstexpr, jeśli wymagana jest ocena czasu kompilacji. Zobacz Wytyczne podstawowe języka C++ con.5.

Grupa TYPÓW

C26437 DONT_SLICE
Nie fragmentuj. Zobacz Podstawowe wytyczne dotyczące języka C++ ES.63.

C26465 NO_CONST_CAST_UNNECESSARY
Nie należy używać const_cast do odrzucenia const. const_cast nie jest wymagane; constness lub zmienność nie jest usuwana przez tę konwersję. Zobacz C++ Core Guidelines Type.3 (Typ wytycznych podstawowych języka C++3).

C26466 NO_STATIC_DOWNCAST_POLYMORPHIC
Nie używaj static_cast downcasts. Rzutowanie z typu polimorficznego powinno używać dynamic_cast. Zobacz C++ Core Guidelines Type.2 (Typ wytycznych podstawowych języka C++2).

C26471 NO_REINTERPRET_CAST_FROM_VOID_PTR
Nie używaj reinterpret_cast. Rzutowanie z void* może używać funkcji static_cast. Zobacz C++ Core Guidelines Type.1 (Typ wytycznych podstawowych języka C++1).

C26472 NO_CASTS_FOR_ARITHMETIC_CONVERSION
Nie używaj elementu static_cast do konwersji arytmetycznych. Użyj inicjowania nawiasu klamrowego, gsl::narrow_cast lub gsl::narrow. Zobacz C++ Core Guidelines Type.1 (Typ wytycznych podstawowych języka C++1).

C26473 NO_IDENTITY_CAST
Nie rzutuj między typami wskaźników, w których typ źródłowy i typ docelowy są takie same. Zobacz C++ Core Guidelines Type.1 (Typ wytycznych podstawowych języka C++1).

C26474 NO_IMPLICIT_CAST
Nie rzutuj między typami wskaźników, gdy konwersja może być niejawna. Zobacz C++ Core Guidelines Type.1 (Typ wytycznych podstawowych języka C++1).

C26475 NO_FUNCTION_STYLE_CASTS
Nie używaj rzutów C stylu funkcji. Zobacz Podstawowe wytyczne dotyczące języka C++ ES.49.

C26490 NO_REINTERPRET_CAST
Nie używaj reinterpret_cast. Zobacz C++ Core Guidelines Type.1 (Typ wytycznych podstawowych języka C++1).

C26491 NO_STATIC_DOWNCAST
Nie używaj static_cast downcasts. Zobacz C++ Core Guidelines Type.2 (Typ wytycznych podstawowych języka C++2).

C26492 NO_CONST_CAST
Nie należy używać const_cast do odrzucenia const. Zobacz C++ Core Guidelines Type.3 (Typ wytycznych podstawowych języka C++3).

C26493 NO_CSTYLE_CAST
Nie używaj rzutów w stylu C. Zobacz C++ Core Guidelines Type.4 (Typ wytycznych podstawowych języka C++4).

C26494 VAR_USE_BEFORE_INIT
Zmienna "zmienna" jest niezainicjowana. Zawsze inicjuj obiekt. Zobacz C++ Core Guidelines Type.5 (Typ wytycznych podstawowych języka C++).

C26495 MEMBER_UNINIT
Zmienna "zmienna" jest niezainicjowana. Zawsze inicjuj zmienną składową. Zobacz C++ Core Guidelines Type.6 (Typ wytycznych podstawowych języka C++6).

Grupa GRANIC

C26446 USE_GSL_AT
Wolisz używać gsl::at() zamiast niezaznaczonego operatora indeksu dolnego. Zobacz Podstawowe wytyczne języka C++: Bounds.4: Nie używaj funkcji i typów biblioteki standardowej, które nie są sprawdzane pod kątem granic.

C26481 NO_POINTER_ARITHMETIC
Nie używaj arytmetyki wskaźnika. Zamiast tego użyj zakresu. Zobacz Podstawowe wskazówki dotyczące języka C++ Bounds.1

C26482 NO_DYNAMIC_ARRAY_INDEXING
Indeksuj tylko do tablic przy użyciu wyrażeń stałych. Zobacz Ograniczenia podstawowych wytycznych języka C++.2

C26483 STATIC_INDEX_OUT_OF_RANGE
Wartość jest spoza granic (0, powiązana) zmiennej "zmienna". Indeksuj tylko do tablic przy użyciu wyrażeń stałych, które znajdują się w granicach tablicy. Zobacz Ograniczenia podstawowych wytycznych języka C++.2

C26485 NO_ARRAY_TO_POINTER_DECAY
Wyrażenie "wyrażenie": brak tablicy do rozkładu wskaźnika. Zobacz Podstawowe wskazówki dotyczące języka C++ Bounds.3

Grupa GSL

C26445 NO_SPAN_REF
Odwołanie do gsl::span lub std::string_view może być wskazaniem problemu z okresem istnienia. Zobacz Podstawowe wytyczne języka C++ GSL.view: Views

C26446 USE_GSL_AT
Wolisz używać gsl::at() zamiast niezaznaczonego operatora indeksu dolnego. Zobacz Podstawowe wytyczne języka C++: Bounds.4: Nie używaj funkcji i typów biblioteki standardowej, które nie są sprawdzane pod kątem granic.

C26448 USE_GSL_FINALLY
Rozważ użycie gsl::finally , jeśli ostateczna akcja jest przeznaczona. Zobacz Podstawowe wytyczne języka C++: GSL.util: Narzędzia.

C26449 NO_SPAN_FROM_TEMPORARY
gsl::span lub std::string_view utworzony na podstawie tymczasowego będzie nieprawidłowy, gdy tymczasowe zostanie unieważnione. Zobacz Podstawowe wytyczne języka C++: GSL.view: Views.

Ostrzeżenia przestarzałe

Poniższe ostrzeżenia są obecne we wczesnym zestawie reguł eksperymentalnych podstawowego modułu sprawdzania wytycznych, ale są teraz przestarzałe i można je bezpiecznie zignorować. Ostrzeżenia są zastępowane przez ostrzeżenia z powyższej listy.

  • 26412 DEREF_INVALID_POINTER
  • 26413 DEREF_NULLPTR
  • 26420 ASSIGN_NONOWNER_TO_EXPLICIT_OWNER
  • 26421 ASSIGN_VALID_OWNER
  • 26422 VALID_OWNER_LEAVING_SCOPE
  • 26423 ALLOCATION_NOT_ASSIGNED_TO_OWNER
  • 26424 VALID_ALLOCATION_LEAVING_SCOPE
  • 26425 ASSIGNING_TO_STATIC
  • 26499 NO_LIFETIME_TRACKING

Zobacz też

Korzystanie z podstawowych narzędzi sprawdzania wytycznych języka C++