/sdl (啟用其他安全性檢查)

啟用建議的安全性開發生命週期 (SDL) 檢查。 這些檢查會將安全性相關警告變更為錯誤,並設定額外的安全程式碼產生功能。

語法

/sdl[-]

備註

/sdl 會啟用 和 所 /GS 提供之基準安全性檢查的超集合,並覆 /GS- 寫 。 根據預設, /sdl 會關閉。 /sdl- 會停用其他安全性檢查。

編譯時期檢查

/sdl 會啟用這些警告做為錯誤:

/sdl 啟用的警告 對應的命令列參數 描述
C4146 /we4146 一元減號運算子套用至不帶正負號的類型,產生不帶正負號的結果。
C4308 /we4308 將負整數常數轉換為 unsigned 類型,產生一個可能無意義的結果。
C4532 /we4532 continue 區塊中使用 finally__finally/ 、 breakgoto 關鍵字在異常終止期間有未定義的行為。
C4533 /we4533 初始化變數的程式碼不會執行。
C4700 /we4700 使用了未初始化的區域變數。
C4703 /we4703 使用了可能未初始化的本機指標變數。
C4789 /we4789 當使用特定 C 執行階段 (CRT) 函式時發生緩衝區滿溢。
C4995 /we4995 使用標示為 pragma deprecated 的函式。
C4996 /we4996 使用標示為 deprecated 的函式。

執行階段檢查

啟用時 /sdl ,編譯器會產生在執行時間執行這些檢查的程式碼:

  • 啟用執行時間緩衝區超支偵測的 /GS 嚴格模式,相當於使用 #pragma strict_gs_check(push, on) 進行編譯。

  • 會進行有限的指標清理。 在未涉及取值和沒有使用者定義解構函式之型別的運算式中,指標參考會在呼叫 delete 之後設定為不正確位址。 這項清理有助於防止重複使用過時的指標參考。

  • 初始化類別成員指標。 自動初始化物件具現化上指標型 nullptr 別的類別成員(在建構函式執行之前)。 它有助於防止使用建構函式未明確初始化的未初始化指標。 編譯器產生的成員指標初始化只要呼叫:

    • 物件未使用自訂配置(使用者定義的) operator new

    • 物件不會配置為數組的一部分(例如 new A[x]

    • 類別未受管理或匯入

    • 類別具有使用者定義的預設建構函式。

    若要由編譯器產生的類別初始化函式初始化,成員必須是指標,而不是屬性或常數。

如需詳細資訊,請參閱 警告、/sdl 和改善未初始化的變數偵測

在 Visual Studio 開發環境中設定這個編譯器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [ 組態屬性 > C/C++ > 一般 ] 屬性頁。

  3. 使用屬性下拉式控制項設定 SDL 檢查 屬性。 選擇 [確定 ] 或 [ 套用 ] 以儲存您的變更。

另請參閱

MSVC 編譯器選項
MSVC 編譯器命令列語法