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++