/sdl (啟用其他安全性檢查)
啟用建議的安全性開發生命週期 (SDL) 檢查。 這些檢查會將安全性相關警告變更為錯誤,並設定額外的安全程式代碼產生功能。
語法
/sdl
[-
]
備註
/sdl 會啟用 和 所 /GS
提供之基準安全性檢查的超集,並覆 /GS-
寫 。 根據預設, /sdl
會關閉。 /sdl-
會停用其他安全性檢查。
編譯時期檢查
/sdl
會啟用這些警告做為錯誤:
/sdl 啟用的警告 | 對應的命令列參數 | 描述 |
---|---|---|
C4146 | /we4146 | 一元減號運算子套用至不帶正負號的類型,產生不帶正負號的結果。 |
C4308 | /we4308 | 將負整數常數轉換為 unsigned 類型,產生一個可能無意義的結果。 |
C4532 | /we4532 | 在continue 區塊中使用finally __finally /、 break 或 goto 關鍵詞在異常終止期間有未定義的行為。 |
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 開發環境中設定這個編譯器選項
開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性。
選取 [設定屬性]>C/C++>[一般] 屬性頁面。
使用屬性下拉式控制項設定 SDL 檢查屬性。 選擇 [確定] 或 [套用] 以儲存變更。