コンパイラの警告 (レベル 1) C4532
'continue': 終了処理時に、__finally/finally ブロックからのジャンプの動作が定義されていません
解説
コンパイラは、次のいずれかのキーワードを検出しました。
異常終了中に __finally
または finally
ブロックから飛び出す原因となります。
例外が発生し、終了ハンドラー (__finally
または finally ブロック) の実行中にスタックがアンワインドされ、__finally
ブロックが終了する前にコードが __finally
ブロックからジャンプした場合、動作は未定義になります。 コントロールはアンワインド コードに戻らない場合があるため、例外が適切に処理されない可能性があります。
__finally
ブロックから移動する必要がある場合は、最初に異常終了を確認してください。
/sdl
(追加のセキュリティ チェックを有効にする) コンパイラ オプションを使用すると、この警告がエラーに昇格されます。
例
次の例では C4532 が生成されます。警告を解決するには、ジャンプ ステートメントを削除するかコメント アウトします。
// C4532.cpp
// compile with: /W1
// C4532 expected
int main() {
int i;
for (i = 0; i < 10; i++) {
__try {
} __finally {
// Delete the following line to resolve.
continue;
}
__try {
} __finally {
// Delete the following line to resolve.
break;
}
}
}