4

Ich versuche zu verstehen, wie Ensures() in Code zu verwenden. Wie in den example gegeben, wenn ich mit Ensures() versuchte wie folgt ...Ensures() - Richtlinie Unterstützung Bibliothek

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

Wenn das result Variable 255 nicht gleich ist, stürzt das Programm mit der folgenden Ausgabe "terminate called without an active exception". Meine Frage ist, wie man Ensures() richtig verwendet?

Antwort

7

Verwenden Sie die Microsoft GSL implementation? Dann, wenn Sie the gsl_assert.h header file überprüfen, werden Sie sehen, dass, wenn GSL_TERMINATE_ON_CONTRACT_VIOLATION definiert ist (was Standard ist), dann Ensures wird std::terminate aufrufen, die Ihnen den Fehler geben wird, den Sie erhalten.

Wenn eine Ausnahme ausgelöst werden soll (mit Datei- und Zeilennummerninformationen), müssen Sie GSL_THROW_ON_CONTRACT_VIOLATION definieren, bevor Sie die GSL einschließen.

Wenn Sie Ensures richtig verwenden, dann ja.

+0

Danke, für die Antwort, wird die Kopfzeile überprüfen. – NJMR

+0

Ich verwende keine MS GSL. Ich habe versucht, MS GSL mit Visual Studio 2013. Aber es wurde "fataler Fehler C1001: Ein interner Fehler ist im Compiler aufgetreten". – NJMR

+0

Nach Ihrem Vorschlag, ging ich in die "gsl-lite.h" und modifizierte die # define gsl_CONFIG_THROWS_FOR_TESTING 0 zu # define gsl_CONFIG_THROWS_FOR_TESTING 1. Jetzt bekomme ich eine Ausnahme, die ich es fangen kann. Vielen Dank. – NJMR

Verwandte Themen