директива #define с несколькими заменами?

Я относительно новичок в программировании и пытаюсь научиться использовать wxWidgets в C++ (с Visual Studio 2010).

Я просматривал заголовочный файл wxWidgets «app.h» и вижу некоторые #define директивы, которые я не могу понять. Вот пример:

#define wxIMPLEMENT_APP(appname)            \
   wxIMPLEMENT_WX_THEME_SUPPORT            \
   wxIMPLEMENT_APP_NO_THEMES(appname)"

Я привык видеть #define с одним "идентификатором" и одной "заменой", поэтому не могу понять, имеет ли этот макрос два "идентификатора" (wxIMPLEMENT_APP(appname) и wxIMPLEMENT_WX_THEME_SUPPORT) и одну "замену" (wxIMPLEMENT_APP_NO_THEMES (appname)) или один " идентификатор" (wxIMPLEMENT_APP(appname)) и две "замены" (wxIMPLEMENT_WX_THEME_SUPPORT и wxIMPLEMENT_APP_NO_THEMES(appname)).

Как мне понять этот макрос?

Я пытался искать в Интернете и в учебниках, выполняя поиск в разделе «макросы», «директивы препроцессора», «макросы замены текста», «директива #define» и тому подобное, но я не смог найти примеры с объяснением, похожим на один у меня здесь.


person Jason McLafferty    schedule 05.04.2012    source источник
comment
Совет: старайтесь использовать макросы в крайнем случае.   -  person iammilind    schedule 05.04.2012
comment
Используя вашу номенклатуру, ваш макрос имеет один идентификатор и одну замену. Идентификатор wxIMPLEMENT_APP(appname), замена wxIMPLEMENT_WX_THEME_SUPPORT wxIMPLEMENT_APP_NO_THEMES(appname)".   -  person Robᵩ    schedule 05.04.2012
comment
Роб: спасибо за разъяснение ролей идентификатора и замены.   -  person Jason McLafferty    schedule 05.04.2012


Ответы (1)


Этот макрос препроцессора содержит одну замену, разделенную на несколько строк. \ в конце строки позволяет вам написать одну «логическую» строку на нескольких строках текста.

Все, что следует за wxIMPLEMENT_APP(appname), будет размещено в тексте программы при соответствии шаблону wxIMPLEMENT_APP(appname); предположительно, оба эти определения будут в дальнейшем обработаны препроцессором, потому что они выглядят как ссылки на другие определения макросов.

person Sergey Kalinichenko    schedule 05.04.2012
comment
Спасибо за вашу помощь; помимо ответа на мой конкретный вопрос, вы помогли мне прояснить некоторые термины. - person Jason McLafferty; 05.04.2012