ホームページ  >  記事  >  バックエンド開発  >  Microsoft C++ 言語拡張: try-exc ステートメントの構造化例外

Microsoft C++ 言語拡張: try-exc ステートメントの構造化例外

php是最好的语言
php是最好的语言オリジナル
2018-08-06 14:28:332736ブラウズ

Microsoft 固有

try-Except Try-Except

ステートメントは、アプリケーションを終了できるようにする Microsoft C 言語拡張機能です。イベント発生時に通常通り実行され、プログラムの制御を取得します。このようなイベントは例外と呼ばれ、例外を処理するメカニズムは構造化例外処理と呼ばれます。

例外はハードウェアベースまたはソフトウェアベースである可能性があります。アプリケーションがハードウェア例外またはソフトウェア例外から完全に回復できない場合でも、構造化例外処理はエラー情報を表示し、アプリケーションの内部状態をキャプチャすることで問題の診断に役立ちます。これは、簡単に再現できない断続的な問題に特に役立ちます。

構文

try-before-statement
__try compound-statement

__Except ( expression ) compound-statement

__try 句の後の複合文守られているお祭りです。 #Except

句の後の複合ステートメントは例外ハンドラーです。制御セクションの実行中に例外がスローされた場合、ハンドラーは実行される一連のアクションを指定します。実行プロセスは次のとおりです。
  1. #保護されたセクションを実行します。

  2. 保護されたセクションの実行中に例外が発生しなかった場合、実行は __Except

    句の後のステートメントから続行されます。

  3. 保護されたセクションの実行中、または保護されたセクションによって呼び出されたルーチンで例外が発生した場合、__Except
    式が評価され、返された値によって次のことが決まります。例外がどのように処理されるか。値は 3 つあります。
  4. EXCEPTION_CONTINUE_SEARCH 例外は認識されません。スタックでハンドラーの検索を続けます。最初に try-excel
    ステートメント、次に優先順位が次に高いハンドラーを探します。
  5. EXCEPTION_CONTINUE_EXECUTION

    例外は認識されましたが、閉じられました。例外が発生した時点から実行が続行されます。

    EXCEPTION_EXECUTE_HANDLER 例外を識別できます。 __Except

    複合ステートメントを実行して例外ハンドラーの制御を移し、例外が発生した場所から実行を続行します。

__Except

式は C 式として評価されるため、単一の値、条件式演算子、またはカンマ演算子に制限されます。より広範な処理が必要な場合は、式で上記の 3 つの値のいずれかを返すルーチンを呼び出すことができます。 例を示します
Microsoft C++ 言語拡張: try-exc ステートメントの構造化例外

構造化例外処理は、C および C ソース ファイルに適用されます。ただし、これは C 専用に設計されたものではありません。 C 例外処理を使用すると、コードの移植性が向上します。さらに、C の例外処理メカニズムは、あらゆる種類の例外を処理できるため、はるかに柔軟です。
例を示します
Microsoft C++ 言語拡張: try-exc ステートメントの構造化例外

C プログラムの場合は、構造化例外処理の代わりに C 例外処理を使用する必要があります。詳細については、『C 言語リファレンス』の「例外処理」を参照してください。
###

アプリケーション内の各ルーチンは、独自の例外ハンドラーを持つことができます。 __Except 式は、__try 本体のスコープ内で実行されます。これは、そこで宣言されたローカル変数にアクセスできることを意味します。

__leave キーワードは、try-excel ステートメント ブロックで有効です。 __leave の効果は、try-excel ブロックの最後にジャンプすることです。例外ハンドラーが終了すると、実行が再開されます。 goto ステートメントを使用して同じ結果を得ることができますが、goto ステートメントを使用するとスタックがアンロールされます。 __leave ステートメントにはスタックの巻き戻しが含まれないため、より効率的です。

longjmp ランタイム関数を使用して try-excel ステートメントを終了すると、異常終了とみなされます。 __try ステートメントへのジャンプは違法ですが、ステートメントからのジャンプは合法です。 try-excel ステートメントの実行中にプロセスがキャンセルされた場合、例外ハンドラーは呼び出されません。

次に、例外ハンドラーと終了ハンドラーの例を示します。終了ハンドラーの詳細については、try-finally ステートメントを参照してください。

.  
.  
.  
puts("hello");  
__try{  
   puts("in try");  
   __try{  
      puts("in try");  
      RAISE_AN_EXCEPTION();  
   }__finally{  
      puts("in finally");  
   }  
}__except( puts("in filter"), EXCEPTION_EXECUTE_HANDLER ){  
   puts("in except");  
}  
puts("world");

これは、上記の例の出力であり、右側にコメントが追加されています:

hello  
in try              /* fall into try                     */  
in try              /* fall into nested try                */  
in filter           /* execute filter; returns 1 so accept  */  
in finally          /* unwind nested finally                */  
in except           /* transfer control to selected handler */  
world               /* flow out of handler                  */

Microsoft 固有の終了

関連記事:

C 言語 PHP helloworld 拡張機能

C 言語の構造関数: PHP 言語の構造と関数の違い

以上がMicrosoft C++ 言語拡張: try-exc ステートメントの構造化例外の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。