次の方法で共有


警告 C26863

日時処理関数 func からの戻り値は無視されます

この規則は、Visual Studio 2022 17.8 で追加されました。

解説

年、月、または日付の入力引数が適切な閏年処理なしで操作されたときに日付構造を変換する関数の戻り値を確認することが重要です。 そうしないと、関数が失敗し、無効なデータを含む出力パラメーターで実行が続行される可能性があります。

この警告で扱われる関数の一覧を次に示します。

コード分析名: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED

次のコードは、現在のシステム時刻を取得し、月フィールドを 1 か月進めて、更新されたシステム時刻に対応するファイル時刻 SystemTimeToFileTimeを取得しようとします。 ただし、 SystemTimeToFileTime 更新されたシステム時間が無効になる可能性があるため、失敗することがあります。

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

この問題を解決するには、常に日時操作関数から戻り値をチェックし、エラーを適切に処理します。

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

ヒューリスティック

この規則では、Windows SYSTEMTIME 構造体と C tm 構造体のみが認識されます。

この規則は、これらの関数を呼び出す前に入力引数が検証されたかどうかに関係なく適用されます。 関数を呼び出す前にすべての入力引数が検証された場合、この規則は誤った警告を報告できます。

このルールはオプトイン ルールです。つまり、コード分析ではルール セット ファイルを使用し、ルールをルール セット ファイルに明示的に含め、適用できるように設定する必要があります。 コード分析用のカスタム ルールセットの作成の詳細については、「ルール セットを使用して実行するルールをC++指定する」を参照してください

関連項目

C6393
C6394
C26861
C26862
C26864