Udostępnij za pośrednictwem


Ostrzeżenie C26863

Wartość zwracana z funkcji func obsługi daty i godziny jest ignorowana

Ta reguła została dodana w programie Visual Studio 2022 17.8.

Uwagi

Ważne jest, aby sprawdzić wartość zwracaną funkcji, która przekształca strukturę dat, gdy argument wejściowy roku, miesiąca lub daty był manipulowany bez odpowiedniej obsługi roku przestępnego. W przeciwnym razie funkcja mogła zakończyć się niepowodzeniem i wykonanie będzie kontynuowane z parametrem wyjściowym zawierającym nieprawidłowe dane.

Poniżej znajduje się lista funkcji, które obejmuje to ostrzeżenie:

Nazwa analizy kodu: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED

Przykład

Poniższy kod próbuje uzyskać bieżący czas systemowy, przesunąć pole miesiąca o jeden miesiąc i uzyskać czas pliku, który odpowiada zaktualizowanemu czasowi systemu za pośrednictwem .SystemTimeToFileTime Jednak może się nie powieść, SystemTimeToFileTime ponieważ zaktualizowany czas systemu może stać się nieprawidłowy:

#include <Windows.h> 
 
void foo() 
{ 
    FILETIME ft; 
    SYSTEMTIME st; 
    GetSystemTime(&st); 
    st.wMonth++; // Advance month by one 
    // Get the file time 
    SystemTimeToFileTime(&st, &ft);    // C26863 
}

Aby rozwiązać ten problem, należy zawsze sprawdzać wartość zwracaną z funkcji manipulowania datą i odpowiednio obsługiwać błędy:

#include <Windows.h> 
  
void foo() 
{ 
    FILETIME ft; 
    SYSTEMTIME st; 
    GetSystemTime(&st); 
    
    st.wMonth++; // Advance month by one 
    // Get file time 
    if (SystemTimeToFileTime(&st, &ft)) 
    { 
        // Use file time 
    } 
}

Algorytmy heurystyczne

Ta reguła rozpoznaje tylko strukturę systemu Windows SYSTEMTIME i strukturę języka C tm .

Ta reguła jest wymuszana niezależnie od tego, czy argumenty wejściowe zostały zweryfikowane przed wywołaniem tych funkcji. Jeśli wszystkie argumenty wejściowe są weryfikowane przed wywołaniem funkcji, ta reguła może zgłaszać fałszywe ostrzeżenie.

Ta reguła jest regułą zgody, co oznacza, że analiza kodu powinna używać pliku zestawu reguł, a reguła powinna zostać jawnie dołączona do pliku zestawu reguł i włączona, aby została zastosowana. Aby uzyskać więcej informacji na temat tworzenia niestandardowego zestawu reguł na potrzeby analizy kodu, zobacz Używanie zestawów reguł do określania C++ reguł do uruchomienia.

Zobacz też

C6393
C6394
C26861
C26862
C26864