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

Using the predefs

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 26. Boost.Predef 1.4.1

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

PrevUpHomeNext

Для использования автоматически определенных предефов необходимо включать только один заголовок верхнего уровня:

#include <boost/predef.h>

Это определяетвсемакросы версий, известные библиотеке. Для каждого макроса он будет определен как.нользначение выражения для того, когда конкретный предмет не обнаружен, и дляположительноезначение, если оно обнаружено. Макросы predef делятся на пять категорий, каждая из которых содержит макросы определенного префикса:

  • <BOOST_ARCH_>для архитектуры системы/ЦП компилируется.
  • <BOOST_COMP_>Для компилятора используется один.
  • <BOOST_LANG_>Для языковых стандартов один компилируется против.
  • <BOOST_LIB_C_>и<BOOST_LIB_STD_>для используемой стандартной библиотеки C и C++.
  • <BOOST_OS_>Для операционной системы, которую мы собираем.
  • <BOOST_PLAT_>для платформ поверх операционной системы или компиляторов.
  • <BOOST_ENDIAN_>для эндианности сочетания os и архитектуры.
  • <BOOST_HW_>Для аппаратных характеристик.
  • <BOOST_HW_SIMD>для обнаружения SIMD (Single Instruction Multiple Data).
[Note] Note

Обнаруженные определения предназначены для конфигурации, на которую нацелен компилятор. В частности, в кросс-компиляции это означает систему-мишень, а не систему-хозяин.

Один использует индивидуальные определения для сравнения с конкретными версиями, сравнивая макрос<BOOST_VERSION_NUMBER>. Например, чтобы сделать выбор на основе версии компилятора GCC C++, нужно:

#include <boost/predef.h>
#include <iostream>
int main()
{
  if (BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(4,0,0))
    std::cout << "GCC compiler is at least version 4.0.0" << std::endl;
  else
    std::cout << "GCC compiler is at older than version 4.0.0, or not a GCC compiler" << std::endl;
  return 0;
}

Как вы можете заметить выше, пункт 23 также охватывает случай, когда конкретный компилятор не обнаружен. Но можно сделать тест также тест для обнаружения. Все определения предположений определяются как выражение 0 (нулевое), если оно не обнаружено. Следовательно, можно использовать обнаружение с естественным единственным условием. Например:

#include <boost/predef.h>
#include <iostream>
int main()
{
  if (BOOST_COMP_GNUC)
    std::cout << "This is GNU GCC!" << std::endl;
  else
    std::cout << "Not GNU GCC." << std::endl;
  return 0;
}

А поскольку предеф - это препроцессорные определения, то из препроцессора возможно то же самое:

#include <boost/predef.h>
#include <iostream>
#if BOOST_COMP_GNUC
  #if BOOST_COMP_GNUC >= BOOST_VERSION_NUMBER(4,0,0)
    const char * the_compiler = "GNU GCC, of at least version 4."
  #else
    const char * the_compiler = "GNU GCC, less than version 4."
  #endif
#else
  const char * the_compiler = "Not GNU GCC."
#endif
int main()
{
  std::cout << the_compiler << std::endl;
  return 0;
}

Кроме того, для каждой версии макро определено<*_AVAILABLE>макро определено только при обнаружении конкретного аспекта. То есть определение, эквивалентное:

#if BOOST_PREDEF_ABC
  #define BOOST_PREDEF_ABC_AVAILABLE
#endif

Также для каждого аспекта существует макроопределение с описательным названием того, что такое обнаружение.

The *_EMULATED macros

Определения Predef гарантированно будут однозначно определены в рамках одной категории. Но есть контексты, в которых возможны множественные основные обнаружения. Хорошо известным примером этого является обнаружение компиляторов GCC и MSVC, которые обычно эмулируются другими компиляторами путем определения тех же базовых макросов. Для учета этого детектирования заголовкам разрешается определять<*_EMULATED>предефы при обнаружении данной ситуации. Эмулированные предефы будут установлены на номер версии обнаружения вместо обычного макроса предеф для этого обнаружения. Например, MSVC установит<BOOST_COMP_MSVC_EMULATED>, но не установит<BOOST_COM_MSVC>, и он также установит<BOOST_COMP_MSVC_AVAILABLE>.

Using the BOOST_VERSION_NUMBER macro

Все предефы определяются как использование макроса<BOOST_VERSION_NUMBER>. Макро принимает отдельные основные, второстепенные и патч-выражения значений:

#define BOOST_VERSION_NUMBER( major, minor, patch ) ...

Аргументы таковы:

  1. Номер основной версии, как выражение постоянного значения в диапазоне [0,99].
  2. Незначительный номер версии, как выражение постоянного значения в диапазоне [0,99].
  3. Номер версии патч-уровня, как выражение постоянного значения в диапазоне [0,99999].

Диапазоны для каждого из них «вынуждены» использованием модуля («%»), то есть усечения, в отличие от зажима. И, следовательно, это означает, что ограничения соблюдаются только для того, чтобы избежать проблем вне зоны действия. Но этого недостаточно для предотвращения других проблем. Например, превышение диапазона и получение ложных обнаружений или необнаружений. Это зависит от индивидуальных предефов, чтобы обеспечить правильное использование за пределами гарантии диапазона.

Значения для аргументов могут быть любыми действительными для препроцессора постоянными выражениями значений. Только арифметика постоянных значений используется в определении макроса<BOOST_VERSION_NUMBER>и в любом другом макросе. Это означает, что любое допустимое основание возможно, т.е. двоичное, октальное, десятичное и шестидесятичное. Например:

#define MY_APPLICATION_VERSION_NUMBER BOOST_VERSION_NUMBER(2,0xA,015)

Это эквивалентно:

#define MY_APPLICATION_VERSION_NUMBER BOOST_VERSION_NUMBER(2,10,13)

PrevUpHomeNext

Статья Using the predefs раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 26. Boost.Predef 1.4.1 может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 26. Boost.Predef 1.4.1 ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 16:52:40/0.0093188285827637/1