Я читаю фрагмент кода, который, кажется, по желанию использует библиотеку 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?
Я предполагаю, что _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
если заголовок существует. Обратите внимание на отсутствие подчеркивания в начале.
это просто означает, что если вы определите макрос препроцессора «_HAVE_BOOST», компилятор будет включать boost / random.hpp. Как это:
#define _HAVE_BOOST
#ifdef _HAVE_BOOST
#include <boost/random.hpp>
#endif
Посмотрите Вот для более подробной информации о директивах препроцессора.
Если компилятор поддерживает c ++ 11, он будет иметь <random>
служба поддержки.
При некотором умном использовании косвенных включений и typedefs (или using
заявления?!) это может быть сделано для работы с или без повышения для случайного.