Макрос assert
Макрос assert используется для проверки условий во время выполнения программы. В параметр макроса мы передаем выражение, которое должно быть истинным. Если выражение истинно, программа продолжает работу. Если выражение ложно, макрос выводит диагностическое сообщение в поток ошибок и вызывает функцию abort, которая аварийно завершает программу.
Макрос assert удобно использовать для отладки: он позволяет быстро находить логические ошибки, связанные с нарушением предположений о значениях переменных. При компиляции с директивой NDEBUG (например, в релизной сборке) все вызовы assert игнорируются, поэтому проверки не замедляют готовую программу.
Синтаксис
#include <cassert>
assert(expression);
Пример
Давайте проверим, что переменная x действительно равна 5. Если это так, программа завершится успешно:
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int x = 5;
assert(x == 5);
cout << "Assert passed" << endl;
return 0;
}
Результат выполнения кода:
"Assert passed"
Пример
А теперь давайте передадим в assert ложное условие. Программа выведет сообщение об ошибке и завершится аварийно:
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
int x = 3;
assert(x == 5);
cout << "This line will not be printed" << endl;
return 0;
}
Результат выполнения кода (приблизительный):
"Assertion failed: x == 5, file main.cpp, line 8"
Обратите внимание: строка с выводом текста "This line will not be printed" не выполнится, так как программа завершится на макросе assert.
Смотрите также
-
макрос
static_assert,
который проверяет условие на этапе компиляции -
функция
abort,
которая аварийно завершает программу -
оператор
throw,
который генерирует исключение -
класс
exception,
который является базовым классом для исключений