C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Справочное руководство. Командные Строки Компилятора.
 
                  
              11. Командные Строки Компилятора

      независимый от остального языка синтаксис;
они могут появляться в любом месте и оказывать влияние, кото-
рое распространяется   (независимо  от области видимости)  до
конца файла исходной программы.

     Учтите, что определения const и inline дают альтернативы
для большинства использований #define.

                     11.1 Замена Лексем


     Командная строка компилятора вида


  #define идентификатор строка_лексем
     вызывает замену   препроцессором  последующих  вхождений
идентификатора, заданного  строкой символов.  Точка с запятой
внутри (или   в  конце)  строки символов является частью этой
строки.


  Строка вида


  #define идентификатор( идентификатор , ... , идентификатор)
  строка_лексем

     где нет пробела между первым идентификатором и (,  явля-
ется макроопределением с параметрами.  Последующие  вхождения
первого идентификатора   с  идущими за ним (,  последователь-
ностью символов,  разграниченной запятыми,  и ),   заменяются
строкой символов, заданной в определении. Каждое местоположе-
ние идентификатора, замеченного в списке параметров определе-
ния, заменяется  соответствующей строкой из вызова. Фактичес-
кими параметрами вызова являются строки символов, разделенные
запятыми; однако запятые в строке, заключенной в кавычки, или
в круглых скобках не являются разделителями параметров. Число
формальных и фактических параметров должно совпадать.  Строки
и символьные константы в символьной строке сканируются в  по-
исках формальных параметров, но строки и символьные константы
в остальной программе не сканируются в  поисках  определенных
(с помощью define) идентификаторов.


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


  Командная строка вида


  #undef идентификатор


     влечет отмену препроцессорного определения идентификато-
ра.


                    11.2 Включение Файлов


     Командная строка компилятора вида


  #include "имя_файла"

      вариант, командная строка вида


   #include <имя_файла>


     производит поиск только в стандартном или заданном  мес-
те, и не ищет в директории исходного файла. (То, как эти мес-
та задаются, не является частью языка.)
     Включения с помощью #include могут быть вложенными.


                  11.3 Условная Компиляция


     Командная строка компилятора вида

  #if выражение


     проверяет, является ли результатом вычисления  выражения
не-ноль. Выражение  должно быть константным выражением, кото-
рые обсуждаются в #12.  Кроме обычных операций С++ может  ис-
пользоваться унарная операция defined. При применении к иден-
тификатору она дает значение не-ноль, если этот идентификатор
был ранее   определен с помощью #define и после этого не было
отмены определения с помощью #undef; иначе ее значение 0.
     Командная строка вида

  #ifdef идентификатор


     проверяет, определен  ли идентификатор в препроцессоре в
данный момент; то есть, был ли он объектом командной строки #
define. Командная строка вида

  #ifndef идентификатор


     проверяет, является  ли  идентификатор  неопределенным в
препроцессоре в данный момент.


     После каждого из трех видов  может  стоять  произвольное
количество строк, возможно, содержащих командную строку


  #else


     и далее до командной строки


  #endif


     Если проверенное  условие  истинно,  то все строки между
#else и #endif игнорируются.  Если проверенное условие ложно,
то все  строки между проверкой и #else или,  в случае отсутс-
твия #else, #endif, игнорируются.

     Эти конструкции могут быть вложенными.


                   11.4 Управление Строкой


     Для помощи другим препроцессорам, генерирующим программы
на С++, строка вида


  #line константа "имя_файла"

      отсутствует,  то  запомненное  имя
файла не изменяется.

[Назад] [Содержание] [Вперед]

Главная