Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost: assert.hpp documentation

Boost , ,

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

assert.hpp

BOOST_ASSERT
BOOST_ASSERT_MSG
BOOST_VERIFY
Boost_VERIFY_MSG
Boost_ASSERT_IS_VOID

BOOST_ASSERT

Заголовок<<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)>расширяется до

(BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))

То есть он оценивает<expr>, а если ложно, то призывает<::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__)>. Это верно независимо от того, определено ли<NDEBUG>.

<boost::assertion_failed>в<<boost/assert.hpp>>объявлено как

namespace boost
{
  void assertion_failed(char const * expr, char const * function, char const * file, long line);
}

Но он никогда не определяется. Ожидается, что пользователь предоставит соответствующее определение.

• Если<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_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_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))

Это верно независимо от того, определено ли<NDEBUG>.

<boost::assertion_failed_msg>в<<boost/assert.hpp>>говорится как

namespace boost
{
  void assertion_failed_msg(char const * expr, char const * msg, char const * function, char const * file, long line);
}

Но он никогда не определяется. Ожидается, что пользователь предоставит соответствующее определение.

• Если макро<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_VERIFY>имеет то же поведение, что и<BOOST_ASSERT>, за исключением того, что выражение, которое передается<BOOST_VERIFY>, всегда оценивается. Это полезно, когда заявленное выражение имеет желаемые побочные эффекты; оно также может помочь подавить предупреждения о неиспользованных переменных, когда единственное использование переменной находится внутри утверждения.

• Если<BOOST_DISABLE_ASSERTS>определено, когда<<boost/assert.hpp>>включено,<BOOST_VERIFY(expr)>расширяется до<((void)(expr))>.

• Если<BOOST_ENABLE_ASSERT_HANDLER>определено, когда<<boost/assert.hpp>>включено,<BOOST_VERIFY(expr)>расширяется до<BOOST_ASSERT(expr)>.

• В противном случае<BOOST_VERIFY(expr)>расширяется до<((void)(expr))>, когда<NDEBUG>определено, до<BOOST_ASSERT(expr)>, когда это не так.

BOOST_VERIFY_MSG

Макро<BOOST_VERIFY_MSG>аналогично<BOOST_VERIFY>, с дополнительным параметром, сообщением об ошибке.

• Если<BOOST_DISABLE_ASSERTS>определено, когда<<boost/assert.hpp>>включено,<BOOST_VERIFY_MSG(expr,msg)>расширяется до<((void)(expr))>.

• Если<BOOST_ENABLE_ASSERT_HANDLER>определено, когда<<boost/assert.hpp>>включено,<BOOST_VERIFY_MSG(expr,msg)>расширяется до<BOOST_ASSERT_MSG(expr,msg)>.

В противном случае<BOOST_VERIFY_MSG(expr,msg)>расширяется до<((void)(expr))>, когда<NDEBUG>определено, до<BOOST_ASSERT_MSG(expr,msg)>, когда это не так.


BOOST_ASSERT_IS_VOID

Макро<BOOST_ASSERT_IS_VOID>определяется, когда<BOOST_ASSERT>и<BOOST_ASSERT_MSG>, расширены до<((void)0)>. Этот макрос полезен, чтобы избежать компиляции и потенциально запуска кода, который предназначен только для подготовки данных, которые будут использоваться в утверждении.

void MyContainer::erase(iterator i)
{
  //Some sanity checks, data must be ordered
  #ifndef BOOST_ASSERT_IS_VOID
     if(i != c.begin()){
        iterator prev = i;
        --prev;
        BOOST_ASSERT(*prev < *i);
     }
     else if(i != c.end()){
        iterator next = i;
        ++next;
        BOOST_ASSERT(*i < *next);
     }
  #endif
  this->erase_impl(i);
}

• По умолчанию<BOOST_ASSERT_IS_VOID>определяется, если<NDEBUG>определено.

• Если макро<BOOST_DISABLE_ASSERTS>определено,<BOOST_ASSERT_IS_VOID>всегда определено.

• Если макро<BOOST_ENABLE_ASSERT_HANDLER>определено, то<BOOST_ASSERT_IS_VOID>никогда не определено.

• Если<BOOST_ENABLE_ASSERT_DEBUG_HANDLER>, то<BOOST_ASSERT_IS_VOID>определяется, когда<NDEBUG>определено.


Авторское право © 2002, 2007, 2014 by Peter Dimov.  Авторское право © 2011 by Beman Dawes.  Авторское право © 2015 by Ion Gaztanaga. Распространяется под лицензией Boost Software License, версия 1.0. См. сопроводительный файлLICENSE_1_0.txtили копию наhttp://www.boost.org/LICENSE_1_0.txt

Статья Boost: assert.hpp documentation раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:16:27/0.0067870616912842/0