分享方式:


警告 C6393

大小為 365 的查閱表格不足以處理閏年

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

備註

在西曆中,每年只有四分之一的可分割是一個閏年,除了 100 年完全可見的年份。 百年也是閏年,如果他們完全被400分分。

當軟體不考慮這個閏年邏輯,或使用有缺陷的邏輯時,就會發生閏年錯誤。 可能會影響受影響系統的可靠性、可用性,甚至是安全性。

大小為 365 的查閱表格通常用來快速尋找指定日期的月份對應。 不過,不正確,因為閏年有 366 天。

程式碼分析名稱: LEAP_YEAR_INVALID_DATE_KEYED_LOOKUP

範例

下列程式碼會針對一年中的日期建立查閱表格,假設每年 365 天。 不過,如果年份是閏年,則無法運作:

 
#include <vector> 
  
void foo(int year) 
{ 
    const std::vector<int> items(365);  // C6393 
    // Initialize items and use it... 
}

若要修正此問題,請根據適當的閏年檢查結果建立資料表,調整查閱表格的大小:

#include <vector> 
  
void foo(int year) 
{ 
    bool isLeapYear = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); 
    const std::vector<int> items(isLeapYear ? 366 : 365); 
    // Initialize items and use it... 
}

啟發學習法

此規則是藉由檢查常數查閱表格的大小是否為 365 個專案來強制執行。 違反此規則會導致報告高信賴度警告。

另請參閱

C6394
C26861
C26862
C26863
C26864