Partilhar via


Aviso C26863

O valor de retorno de uma função func de manipulação de data e hora é ignorado

Essa regra foi adicionada no Visual Studio 2022 17.8.

Comentários

É importante verificar o valor de retorno de uma função que transforma uma estrutura de data quando o argumento de entrada de ano, mês ou data foi manipulado sem o tratamento adequado do ano bissexto. Caso contrário, a função pode ter falhado e a execução continua com um parâmetro de saída contendo dados inválidos.

Segue-se uma lista das funções que este aviso abrange:

Nome da análise de código: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED

Exemplo

O código a seguir tenta obter a hora atual do sistema, adiantar o campo de mês em um mês e obter a hora do arquivo que corresponde à hora atualizada do sistema via SystemTimeToFileTime. No entanto, pode falhar, SystemTimeToFileTime pois a hora atualizada do sistema pode se tornar inválida:

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

Para corrigir o problema, sempre verifique o valor de retorno das funções de manipulação de data e hora e manipule as falhas adequadamente:

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

Heurística

Esta regra só reconhece a struct do Windows SYSTEMTIME e a estrutura C tm .

Essa regra é imposta independentemente de os argumentos de entrada terem sido validados antes de chamar essas funções. Se todos os argumentos de entrada forem validados antes de chamar a função, essa regra poderá relatar um aviso falso.

Essa regra é uma regra de aceitação, o que significa que a análise de código deve usar um arquivo de conjunto de regras, e a regra deve ser explicitamente incluída no arquivo de conjunto de regras e habilitada para que seja aplicada. Para obter mais informações sobre como criar um conjunto de regras personalizado para análise de código, consulte Usar conjuntos de regras para especificar as C++ regras a serem executadas.

Confira também

C6393
C6394
C26861
C26862
C26864