4

コードでEnsures()を使用する方法を理解しようとしています。私は次のようにEnsures()を使用しようとした場合result変数は255に等しくない保証() - ガイドラインサポートライブラリ

int main(void) 
{ 
    int result = 0; 
    // Some calculation 
    Ensures(result == 255); 
    return 0; 
} 

なら...、exampleに示すように、プログラムは、次の出力"terminate called without an active exception"とクラッシュ。私の質問は、Ensures()の使い方です。

答えて

7

Microsoft GSL implementationをお使いですか?次にthe gsl_assert.h header fileをチェックすると、GSL_TERMINATE_ON_CONTRACT_VIOLATIONが定義されている場合(デフォルト)、Ensuresstd::terminateとなり、エラーが発生します。

例外がスローされるようにするには(ファイル番号と行番号情報で)、GSLを含める前にGSL_THROW_ON_CONTRACT_VIOLATIONを定義する必要があります。

Ensuresを正しく使用している場合は、そうです。

+0

返信いただきありがとうございます。ヘッダーを確認します。 – NJMR

+0

私はMS GSLを使用していません。私はVisual Studio 2013でMS GSLを使ってみましたが、 "致命的なエラーC1001:コンパイラで内部エラーが発生しました"というメッセージが表示されていました。 – NJMR

+0

提案通り、私は "gsl-lite.h"に行き、#define gsl_CONFIG_THROWS_FOR_TESTING 0を#define gsl_CONFIG_THROWS_FOR_TESTING 1に変更しました。ありがとう。 – NJMR