警告 C26863
日時処理関数
func
からの戻り値は無視されます
この規則は、Visual Studio 2022 17.8 で追加されました。
解説
年、月、または日付の入力引数が適切な閏年処理なしで操作されたときに日付構造を変換する関数の戻り値を確認することが重要です。 そうしないと、関数が失敗し、無効なデータを含む出力パラメーターで実行が続行される可能性があります。
この警告で扱われる関数の一覧を次に示します。
FileTimeToSystemTime
SystemTimeToFileTime
SystemTimeToTzSpecificLocalTime
SystemTimeToTzSpecificLocalTimeEx
TzSpecificLocalTimeToSystemTime
TzSpecificLocalTimeToSystemTimeEx
RtlLocalTimeToSystemTime
RtlTimeToSecondsSince1970
コード分析名: 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++
指定する」を参照してください。