boost — является ли макрос _HAVE_BOOST встроенным в C ++? Откуда это взялось?

Я читаю фрагмент кода, который, кажется, по желанию использует библиотеку C ++ Boost. Это выглядит следующим образом:

#ifdef _HAVE_BOOST
#include <boost/random.hpp>
#endif

Позже в коде есть несколько операторов, которые зависят от этого «_HAVE_BOOST». Я предполагаю, что _HAVE_BOOST — это просто флаг, установленный в true, если библиотека C ++ правильно импортирована.

Является ли флаг _HAVE_BOOST встроенной частью синтаксиса ifdef в C ++? То есть я попробовал поискать этот флаг в Google, но не нашел никакой документации. Кроме того, в начале файла нет #include<boost> настоящее. Похоже, что эта функция повышения во всем файле устарела — _HAVE_BOOST будет установлен в значение true, если это #include<boost> были добавлены?

Есть ли где-нибудь список или документация для описания типов заглавных букв, которые идут вместе с #ifdef?

-1

Решение

Я предполагаю, что _HAVE_BOOST — это просто флаг, установленный в true …

#ifdef _HAVE_BOOST не проверяет, _HAVE_BOOST является true; Это проверить, такой ли макрос препроцессора определяется вообще, независимо от значения.

…если библиотека C ++ правильно импортирована.

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

Есть ли где-нибудь список или документация для описания типов заглавных букв, которые идут вместе с #ifdef?

Макросы могут быть определены с помощью #define директива в заголовочном файле или в команде компиляции (см. параметр -D для НКУ например). Компиляторы также могут предопределить также несколько макросов.

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

будет ли _HAVE_BOOST иметь значение true, если этот #include был добавлен?

Я считаю маловероятным, что это будет определено в <boost> сам. В конце концов, тестирование, если Boost доступен после того, как вы попытаетесь включить его, было бы довольно бессмысленным.

Когда определяется _HAVE_BOOST?

Вы должны спросить об этом у человека, который написал код. Еще один вопрос для размышления: это вообще определено? Если это не так, то код между ifdefs удаляется препроцессором.

Мой хрустальный шар говорит мне, что он, вероятно, должен быть определен каким-то сценарием конфигурации для процесса сборки. Например, Autoconf есть макрос, который будет определять макрос препроцессора HAVE_header-file если заголовок существует. Обратите внимание на отсутствие подчеркивания в начале.

3

Другие решения

это просто означает, что если вы определите макрос препроцессора «_HAVE_BOOST», компилятор будет включать boost / random.hpp. Как это:

#define _HAVE_BOOST
#ifdef _HAVE_BOOST
#include <boost/random.hpp>
#endif

Посмотрите Вот для более подробной информации о директивах препроцессора.

1

Если компилятор поддерживает c ++ 11, он будет иметь <random> служба поддержки.

При некотором умном использовании косвенных включений и typedefs (или using заявления?!) это может быть сделано для работы с или без повышения для случайного.

0
По вопросам рекламы [email protected]