/sdl (追加のセキュリティ チェックの有効化)
推奨される Security Development Lifecycle (SDL) のチェックを追加します。 これらのチェックには、エラーとしての追加のセキュリティ関連の警告、および追加の安全なコード生成機能が含まれます。
/sdl[-]
解説
/sdl を指定すると、/GS で提供されるベースライン セキュリティ チェックのスーパーセットが有効になり、/GS- がオーバーライドされます。 既定では、/sdl は無効になっています。 /sdl- を指定すると、追加のセキュリティ チェックが無効になります。
コンパイル時のチェック
/sdl を指定すると、次の警告がエラーとして有効になります。
/sdl で有効になる警告 |
同等のコマンド ラインスイッチ |
説明 |
---|---|---|
/we4146 |
単項マイナス演算子が符号なしの型に適用され、符号なしの結果になります。 |
|
/we4308 |
負の整数定数が符号なしの型に変換されて、多くの場合は意味のない結果になります。 |
|
/we4532 |
continue、break、または goto を __finally/finally ブロック内に使用すると、異常終了時、未定義の動作になります。 |
|
/we4533 |
変数の初期化コードが実行されません。 |
|
/we4700 |
初期化されていないローカル変数が使用されます。 |
|
/we4703 |
初期化されていない可能性のあるローカル ポインター変数が使用されます。 |
|
/we4789 |
特定の C ランタイム (CRT) 関数の使用時にバッファー オーバーランが発生します。 |
|
/we4995 |
deprecated プラグマでマークされた関数が使用されます。 |
|
/we4996 |
deprecated でマークされた関数が使用されます。 |
実行時のチェック
/sdl を有効にすると、実行時に次のチェックを実行するコードがコンパイラによって生成されます。
/GS の実行時バッファー オーバーラン検出の strict モードを有効にします。#pragma strict_gs_check(push, on) を使用したコンパイルと同等です。
制限付きでポインターのサニタイズを行います。 逆参照がない式でも、ユーザー定義のデストラクターがない型でも、ポインターの参照は、delete の呼び出し後、無効なアドレスに設定されます。 これは、古いポインター参照の再使用を防止するために役立ちます。
クラス メンバーの初期化を実行します。 すべてのクラス メンバーをオブジェクトのインスタンス化時にゼロに自動的に初期化します (コンストラクターの実行前)。 これは、コンストラクターが明示的に初期化しないクラス メンバーに関連付けられた、初期化されていないデータの使用を防止するために役立ちます。
解説
詳細については、警告、/sdl、および初期化されていない変数の検出の向上に関するページを参照してください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。
[C/C++] フォルダーを選択します。
[全般] ページで、[SDL チェック] ドロップダウン リストからオプションを選択します。