2017-07-11 4 views
1

私は_set_invalid_parameter_handler関数を使用するC#でコードを持っています。それはWindows固有で、私は標準のC++でこのコードを書き直そうとしているので、Linux上で動作します。C++でconstraint_handlersを使用

この機能をどのように翻訳するのかよくわかりません。私はおそらくhttp://en.cppreference.com/w/c/error/set_constraint_handler_sを使用することをお勧めしましたが、私はこの例に従っており、ビジュアルスタジオ2015では制約ハンドラのタイプは認識されません。また、Linuxでコンパイルしようとしています。制約ハンドラを使用するか、標準のC++で_set_invalid_parameter_handler機能を複製するための他の方法を見つけることに役立つでしょう。

+0

何を試しましたか(ポストコード)、どのようなエラーが表示されていますか? – TypeIA

答えて

0

set_constraint_handlerはC11の機能であり、set_invalid_parameterはMicrosoft固有のものです(C++の場合もあります)。

標準のC++では、ハンドラを設定する代わりに例外を使用してtry/catchを実行しますが、呼び出す低レベルの関数が例外を検出して実際にエラーを通知する必要があります。例が役立つかどうかを確認してください。

+0

プログラム内の_set_invalid_parameter_handlerがvsnprintf_sの不正なフォーマット文字列を検出するために使用され、通常はエラーが発生し、処理されます。このシナリオでトリガーされる信号はありますか? – darkThoughts

+0

いいえ、あなたはC++でこの問題を起こすはずはありません。オーバーロードされた演算子<<を使用して出力をフォーマットします(幅を設定するための特別なもの) - コンパイル時に不一致を検出することになっています。明らかに、それはいくらか努力することができます。 –

+0

フォーマット文字列とparams(そのvsnprintf_sが使用する)がサーバから取得され、そのコードを変更できません。だから私は正確にフォーマット文字列とparamsを使用することはできません<<。 – darkThoughts