#pragma leaves は関数名を取り、呼び出し後に関数がディレクティブに戻らないことを指定します。
.-,--------. V | >>-#--pragma--leaves--(----function-+--)-----------------------><
このプラグマは、function が呼び出し元に戻らないようにコンパイラーに命令します。
このプラグマの利点は、これを使用するとコンパイラーは function の後にあるコードをすべて無視することができるので、 最適化プログラムはより効率的なコードを生成することができるという点です。一般的に、 このプラグマはカスタムのエラー処理関数に使用されますが、 この場合特定のエラーが発生すると、プログラムを終了することができます。 これと同様に振る舞う関数としては、exit、longjmp、および terminate があります。
#pragma leaves(handle_error_and_quit) void test_value(int value) { if (value == ERROR_VALUE) { handle_error_and_quit(value); TryAgain(); // optimizer ignores this because // never returns to execute it } }