Condividi tramite


Avviso C26863

Il valore restituito da una funzione func di gestione data/ora viene ignorato

Questa regola è stata aggiunta in Visual Studio 2022 17.8.

Osservazioni:

È importante verificare il valore restituito di una funzione che trasforma una struttura di data quando l'argomento di input anno, mese o data è stato modificato senza gestire correttamente l'anno bisestile. In caso contrario, è possibile che l'esecuzione della funzione non sia riuscita e che l'esecuzione continui con un parametro di output contenente dati non validi.

Di seguito è riportato un elenco delle funzioni illustrate in questo avviso:

Nome dell'analisi del codice: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED

Esempio

Il codice seguente tenta di ottenere l'ora di sistema corrente, avanzare il campo del mese di un mese e ottenere l'ora del file corrispondente all'ora di sistema aggiornata tramite SystemTimeToFileTime. Tuttavia, potrebbe non riuscire, SystemTimeToFileTime perché l'ora di sistema aggiornata potrebbe diventare non valida:

#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 
}

Per risolvere il problema, controllare sempre il valore restituito dalle funzioni di manipolazione di data e gestire gli errori in modo appropriato:

#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 
    } 
}

Euristica

Questa regola riconosce solo lo struct di Windows SYSTEMTIME e lo struct C tm .

Questa regola viene applicata indipendentemente dal fatto che gli argomenti di input siano stati convalidati prima di chiamare queste funzioni. Se tutti gli argomenti di input vengono convalidati prima di chiamare la funzione, questa regola può segnalare un falso avviso.

Questa regola è una regola di consenso esplicito, ovvero l'analisi del codice deve usare un file del set di regole e la regola deve essere inclusa in modo esplicito nel file del set di regole e abilitata per l'applicazione. Per altre informazioni sulla creazione di un set di regole personalizzato per l'analisi del codice, vedere Usare set di regole per specificare le C++ regole da eseguire.

Vedi anche

C6393
C6394
C26861
C26862
C26864