Заголовок<<boost/assert.hpp>>определяет макрос<BOOST_ASSERT>, который аналогичен стандартному<assert>макросу, определенному в<<cassert>>. Макрос предназначен для использования как в библиотеках Boost, так и в пользовательском коде.
• По умолчанию<BOOST_ASSERT(expr)>расширяется до<assert(expr)>.
• Если макро<BOOST_DISABLE_ASSERTS>определено, когда<<boost/assert.hpp>>включено,<BOOST_ASSERT(expr)>расширяется до<((void)0)>, независимо от того, определен ли макро<NDEBUG>. Это позволяет пользователям выборочно отключать<BOOST_ASSERT>, не влияя на определение стандарта<assert>.
• Если<BOOST_ENABLE_ASSERT_HANDLER>определено, когда<<boost/assert.hpp>>включено,<BOOST_ASSERT(expr)>расширяется до
То есть он оценивает<expr>, а если ложно, то призывает<::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)>. Это верно независимо от того, определено ли<NDEBUG>.
<boost::assertion_failed>в<<boost/assert.hpp>>объявлено как
Но он никогда не определяется. Ожидается, что пользователь предоставит соответствующее определение.
• Если<BOOST_ENABLE_ASSERT_DEBUG_HANDLER>определено, когда<<boost/assert.hpp>>включено,<BOOST_ASSERT(expr)>расширяется до<((void)0)>, когда<NDEBUG>определено. В противном случае поведение будет таким, как если бы<BOOST_ENABLE_ASSERT_HANDLER>было определено.
Как и в случае с<<cassert>>,<<boost/assert.hpp>>может быть включено несколько раз в одну единицу перевода.<BOOST_ASSERT>будет пересматриваться каждый раз, как указано выше.
Макро<BOOST_ASSERT_MSG>похоже на<BOOST_ASSERT>, но для этого требуется дополнительный аргумент, буквальный символ, содержащий сообщение об ошибке.
• По умолчанию<BOOST_ASSERT_MSG(expr,msg)>расширяется до<assert((expr)&&(msg))>.
• Если макро<BOOST_DISABLE_ASSERTS>определено, когда<<boost/assert.hpp>>включено,<BOOST_ASSERT_MSG(expr,msg)>расширяется до<((void)0)>, независимо от того, определен ли макро<NDEBUG>.
• Если<BOOST_ENABLE_ASSERT_HANDLER>определено, когда<<boost/assert.hpp>>включено,<BOOST_ASSERT_MSG(expr,msg)>расширяется до
Но он никогда не определяется. Ожидается, что пользователь предоставит соответствующее определение.
• Если макро<BOOST_ENABLE_ASSERT_DEBUG_HANDLER>определено, когда<<boost/assert.hpp>>включен,<BOOST_ASSERT_MSG(expr)>расширяется до<((void)0)>, когда<NDEBUG>определено. В противном случае поведение будет таким, как если бы<BOOST_ENABLE_ASSERT_HANDLER>было определено.
Как и в случае с<<cassert>>,<<boost/assert.hpp>>может быть включен несколько раз в одну единицу перевода.<BOOST_ASSERT_MSG>будет пересматриваться каждый раз, как указано выше.
Макро<BOOST_VERIFY>имеет то же поведение, что и<BOOST_ASSERT>, за исключением того, что выражение, которое передается<BOOST_VERIFY>, всегда оценивается. Это полезно, когда заявленное выражение имеет желаемые побочные эффекты; оно также может помочь подавить предупреждения о неиспользованных переменных, когда единственное использование переменной находится внутри утверждения.
В противном случае<BOOST_VERIFY_MSG(expr,msg)>расширяется до<((void)(expr))>, когда<NDEBUG>определено, до<BOOST_ASSERT_MSG(expr,msg)>, когда это не так.
Макро<BOOST_ASSERT_IS_VOID>определяется, когда<BOOST_ASSERT>и<BOOST_ASSERT_MSG>, расширены до<((void)0)>. Этот макрос полезен, чтобы избежать компиляции и потенциально запуска кода, который предназначен только для подготовки данных, которые будут использоваться в утверждении.
Статья Boost: assert.hpp documentation раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.