Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2012, 19:22   #1
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
Сообщение Активный/неактивный блок препроцессора

Скачал библиотеку freeglut, перед использованием решил покопаться в их исходнике.
Обнаружил что по всему коды распиханны вот такие штуки
Неактивный блок препроцессора:
Код:
#if TARGET_HOST_POSIX_X11
/*
 * Returns GLUT modifier mask for the state field of an X11 event.
 */
int fghGetXModifiers( int state )
{
    int ret = 0;

    if( state & ( ShiftMask | LockMask ) )
        ret |= GLUT_ACTIVE_SHIFT;
    if( state & ControlMask )
        ret |= GLUT_ACTIVE_CTRL;
    if( state & Mod1Mask )
        ret |= GLUT_ACTIVE_ALT;

    return ret;
}
#endif
Активный блок препроцессора:
Код:
#if TARGET_HOST_POSIX_X11 && _DEBUG
...... // здесь у них чуть ли ни весь код приложения,
#endif
Погуглив нашел 1 сайтик только и то написано все корявенько.
Прошу либо краткого описания, но лучше ссылочку на литературу по этой теме. Зарание блогодарен

Добавлено:
Правильно ли я понял, что если TARGET_HOST_POSIX_X11 определена выше, то будет выполняться код между if и endif?
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL

Последний раз редактировалось Inv1s; 21.02.2012 в 19:33.
Inv1s вне форума Ответить с цитированием
Старый 21.02.2012, 22:30   #2
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
Правильно ли я понял, что если TARGET_HOST_POSIX_X11 определена выше, то будет выполняться код между if и endif?
если она определена как ненулевая.
Код:
#define TARGET_HOST_POSIX_X11  1
код выполнится
Код:
#define TARGET_HOST_POSIX_X11  0
не выполнится
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 22.02.2012, 01:51   #3
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

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


Код:
/* Freeglut is intended to function under all Unix/X11 and Win32 platforms. */
/* XXX: Don't all MS-Windows compilers (except Cygwin) have _WIN32 defined?
 * XXX: If so, remove the first set of defined()'s below.
 */
#if defined(_MSC_VER) || defined(__WATCOMC__) || defined(__MINGW32__) \
    || defined(_WIN32) || defined(_WIN32_WCE) \
    || ( defined(__CYGWIN__) && defined(X_DISPLAY_MISSING) )
#   define  TARGET_HOST_MS_WINDOWS 1

#elif defined(__posix__) || defined(__unix__) || defined(__linux__)
#   define  TARGET_HOST_POSIX_X11  1

#elif defined(__APPLE__)
/* This is a placeholder until we get native OSX support ironed out -- JFF 11/18/09 */
#   define  TARGET_HOST_POSIX_X11  1
/* #   define  TARGET_HOST_MAC_OSX    1 */
Вот тут в этом самом freeglut эти переменные и дефайнятся, так сделано потому что в разных компиляторах ну и осях, определены разные переменные, идентифицирующие платформу ( как видно в коде выше, выбор немал =) ), ну и чтоб не таскать за собой всю эту фигню для определения реализации, обходятся лаконичными TARGET_HOST_POSIX_X11 и TARGET_HOST_MS_WINDOWS.
AlexDark вне форума Ответить с цитированием
Старый 22.02.2012, 11:04   #4
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

AlexDark, Спасибо. Теперь понятно зачем это все, пока что можно не заморачиваться над этим
Но все же зарание вопросик, где можно почитать про эти переменные?
Как я понимаю где то должен быть их список :
Код:
 defined(__posix__) || defined(__unix__) || defined(__linux__)
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 22.02.2012, 13:46   #5
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Над этим вообще обычно не заморачиваются, ну вот :
список рас
список двас

Эти макросы в доках компилятора выискивать надо

Последний раз редактировалось AlexDark; 22.02.2012 в 13:48.
AlexDark вне форума Ответить с цитированием
Старый 22.02.2012, 13:49   #6
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

AlexDark, да просто интересно почитать, чтобы представление иметь хотя бы)
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
gcc: Платформенные символы препроцессора. Пепел Феникса Общие вопросы C/C++ 13 24.06.2011 13:28
Активный Эскарон JoSkream Общие вопросы C/C++ 7 21.07.2009 18:29
Что такое директива препроцессора? prikolist Общие вопросы C/C++ 7 11.02.2009 11:52
Директивы препроцессора в С++ alef Общие вопросы C/C++ 1 25.04.2008 01:36