分享方式:


警告 C26863

會忽略日期時間處理函 func 式的傳回值

此規則已在 Visual Studio 2022 17.8 中新增。

備註

請務必確認函式的傳回值,這個函式會在沒有適當的閏年處理的情況下操作年、月或日期輸入自變數時轉換日期結構。 否則,函式可能會失敗,且執行會繼續執行包含無效數據的輸出參數。

以下是此警告涵蓋的函式清單:

程式代碼分析名稱: DATETIME_MANIPULATION_FUNCTION_RETURN_IGNORED

範例

下列程式代碼會嘗試取得目前的系統時間、將月份欄位前移一個月,並透過取得對應至更新系統時間的檔案時間 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 結構。

不論在呼叫這些函式之前是否已驗證輸入自變數,都會強制執行此規則。 如果在呼叫函式之前驗證所有輸入自變數,此規則可能會報告 false 警告。

此規則是加入加入規則,這表示程式代碼分析應該使用規則集檔案,而且規則應該明確包含在規則集檔案中,並啟用規則以套用規則集檔案。 如需建立程式代碼分析自定義規則集的詳細資訊,請參閱 使用規則集指定要 C++ 執行的規則。

另請參閱

C6393
C6394
C26861
C26862
C26864