Использование макроса assert в Си и C++

Есть такая интересная штука в стандартной библиотеке Си, как макрос assert. Что же он делает? Зачем нужен? Как работает? Прошу под кат.

Макрос проверяет переданное ему выражение на истинность(то есть true или false). Если выражение true — программа выполняется дальше, если false — программа аварийно завершается(подробнее далее). Давайте напишем пример, который проиллюстрирует работу макроса:

В результате программа выдаст следующее:

После первого выполнения выражение переданное макросу равнялось true, поэтому программа продолжила свою работу. Второй вызов assert получил в качестве результата выражения false. В этот момент, в стандартный поток ошибок(stderr) была записана информация о вызове, и вызвана функция abort().

Использовать на практике макрос приходится редко, но все же применение найти можно. Например у вас есть программа, которая запускается каким либо образом автоматически, открывает какой-то файл, и записывает в него данные. Если эту программу контролировать не нужно, то можно применить в качестве проверки наличия файла макрос:

Программа попытается открыть файл. Если не получиться, она завершится. В принципе можно пойти более простым и привычным путем:

Но в реальных проектах завершение работы программы при неверных аргументах ничем не отличиться от того же зависания. Поэтому макрос следует использовать только в личных целях. То есть для отладки. К примеру вы пишите программу, по логике она должена работать, но при запуске наблюдается ошибка сегментации. Просто вставьте макрос assert в наиболее опасные места, что бы проверить значения переменных, возвращаемые значения функциями и т.д.. Таким образом вы сможите найти ошибку в коде

Спрашивайте свои ответы, пишите пожелания.

Комментарии 4

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *