mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

            CPP(1)                                                   CPP(1)

            НАЗВАНИЕ
                    cpp - препроцессор для языка C

            СИНТАКСИС
      	  LIBDIR/cpp  [-P] [-C] [-U имя] [-D имя[=значение]] [-T] [-I каталог]
      		      [-Y каталог] [-H] [входной_файл [выходной_файл]]

            ОПИСАНИЕ
		    cpp - это препроцессор языка C,  который  вызывается  в
                    качестве первого прохода при любой  компиляции  C-прог-
                    рамм командой cc(1). Формат результатов работы cpp поз-
                    воляет использовать их в качестве исходных  данных  для
                    следующего прохода C-компилятора. Поскольку язык C раз-
                    вивается, cpp и остальные команды  пакета  C-компиляции
                    будут модифицироваться, чтобы следовать изменениям язы-
                    ка. Поэтому использование  команды  cpp,  минуя  cc(1),
                    чревато неприятностями: в один прекрасный день cpp  мо-
                    жет заработать совсем иначе. См. также m4(1) -  универ-
                    сальный макропроцессор.

                    При вызове cpp в качестве аргументов могут быть указаны
                    два имени файла - входной_файл и выходной_файл  препро-
                    цессора. По умолчанию вместо них используются стандарт-
                    ный ввод и стандартный вывод.

                    Опции:

                    -P   Препроцессировать входной файл без  генерации  уп-
                         равляющей информации о номерах строк, используемой
                         следующими проходами C-компилятора.

                    -C   Копировать в выходной файл все комментарии за иск-
                         лючением комментариев в директивах cpp. По умолча-
                         нию cpp подавляет C-языковые комментарии.

                    -U имя
                         Удалить начальное  определение  зарезервированного
                         имени. Перечень таких имен зависит от  конкретного
                         препроцессора.  Текущий  перечень  (он  разбит  на
                         группы, отвечающие смыслу зарезервированных имен):

                         операционная система:  unix, dmert, gcos, ibm, os,
                                                tss
                         аппаратура:            interdata,   pdp11,   u370,
                                                u3b,  u3b5,  u3b2,  u3b20d,
                                                vax, m68k
                         вариант системы UNIX:  RES, RT
                         утилита lint(1):       lint

                    -D имя
                    -D имя[=значение]
                         Определить имя;  действие  эквивалентно  директиве
                         #define. Если =значение не указано, имя  определя-
                         ется как 1. Опция -D имеет более низкий приоритет,
                         чем -U. Это означает, что если одно и  то  же  имя
                         встретилось в обеих опциях, оно окажется неопреде-
                         ленным, независимо от порядка перечисления опций.

                    -T   Длина имен в препроцессоре  теперь  не  ограничена
                         восемью  символами  (исключение - PDP-11). Если же
                         задана опция -T, значимыми считаются только первые
                         восемь символов. Предыдущие  версии  препроцессора
                         поступали  с  длинными  именами  так же; в текущую
                         версию данная  опция  включена  для  совместимости
                         "назад".

                    -I каталог
                         Изменить  алгоритм поиска включаемых файлов по ди-
                         рективе #include: файлы, имена которых  начинаются
                         не  с /, перед поиском в каталогах из стандартного
                         списка искать в указанном каталоге. При  использо-
                         вании данной опции включаемые файлы, имена которых
                         заключены  в кавычки, сначала ищутся в том катало-
                         ге, где находится аргумент входной_файл,  затем  в
                         каталогах,  указанных  в опции, и в последнюю оче-
                         редь в каталогах из стандартного списка. Для вклю-
                         чаемых файлов, имена которых заключены в <>, поиск
                         в каталоге с входным_файлом не производится.

                    -Y каталог
                         При поиске включаемых файлов использовать  указан-
                         ный каталог вместо каталогов из стандартного спис-
                         ка.

                    -H   Выдавать в стандартный протокол, по одному в стро-
                         ке, составные имена включаемых файлов.

                    Выделено два специальных имени. Имя __LINE__ определено
                    как номер текущей строки с точки зрения cpp (десятичное
                    целое число), __FILE__ - имя текущего файла  (C-цепочка
                    символов).  Данные  имена  могут  использоваться  всюду
                    (включая макросы) как и другие имена, получившие  опре-
                    деления.

                    Все директивы cpp начинаются со строк, первым  символом
                    в которых является #. Между # и  собственно  директивой
                    допускается любое число пробелов и символов  табуляции.
                    Имеются следующие директивы:

                    #define имя цепочка_лексем
                         Заменить последующие вхождения имени на  цепочку_-
                         лексем.

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

                    #undef имя
                         Забыть с данного момента определение  имени  (если
                         оно имелось). После имени запрещается  располагать
                         другие лексемы.

                    #ident "цепочка_символов"
                         Поместить цепочку_символов в  секцию  комментариев
                         об ектного файла.

                    #include "файл"
                    #include <файл>
                         Вставить в данное место содержимое файла  (которое
                         будет затем обработано cpp). Если используется за-
                         пись  <файл>, файл ищется только в стандартных ка-
                         талогах. Дополнительную информацию см. выше в опи-
                         сании опций -I и -Y. После закрывающих символов  "
                         и > запрещается располагать другие лексемы.

                    #line целая_константа "файл"
                         Сформировать управляющую информацию для следующего
                         прохода C-компилятора. Целая_константа -  это  но-
                         мер,  который  получает   следующая  строка,  файл
                         - приписываемое  строке  имя файла. Если "файл" не
                         задан, текущее имя файла не изменяется. После нео-
                         бязательного аргумента файл  запрещается  распола-
                         гать другие лексемы.

                    #endif
                         Завершает группу строк,  которая  начата  условной
                         директивой (#if, #ifdef или #ifndef).  Каждой  ус-
                         ловной директиве должна соответствовать  директива
                         #endif. После #endif запрещается располагать  дру-
                         гие лексемы.

                    #ifdef имя
                         Следующие строки копируются в выходной файл,  если
                         имя в настоящий  момент  определено.  После  имени
                         запрещается располагать другие лексемы.

                    #ifndef имя
                         Следующие строки не копируются  в  выходной  файл,
                         если имя в настоящий момент определено. После име-
                         ни запрещается располагать другие лексемы.

                    #if константное_выражение
                         Следующие строки копируются в выходной файл,  если
                         значение  константного_выражения  не  равно  0.  В
                         констант-  ном_выражении  допустимы  все  бинарные
                         операции  языка  C  (кроме присваивания), операция
                         ?:, унарные операции -, ! и ~. Приоритеты операций
                         такие же, что и в C. Определена еще  одна  унарная
                         операция, которая может использоваться в констант-
                         ном_выражении  в  двух  формах:  defined(имя)  или
                         defined имя.  Благодаря  этой  операции  #ifdef  и
                         #ifndef  являются частными случаями директивы #if.
                         В константном_выражении  могут  быть  использованы
                         только  эти  операции,  целочисленные  константы и
                         имена, которые известны cpp. В частности, недопус-
                         тима операция sizeof.

                         Чтобы проверить, определено ли  хотя  бы  одно  из
                         двух имен, foo и fum, следует воспользоваться  ди-
                         рективой

			      #if defined(foo) || defined(fum)

                    #elif константное_выражение
                         Допускается произвольное число директив #elif меж-
                         ду #if, #ifdef, #ifndef с одной  стороны  и  #else
                         или #endif с другой. Следующие после #elif  строки
                         копируются в выходной файл,  если  проверка  пред-
                         шествующих условий дала результат  "ложь"  (0),  а
                         значение константного_выражения оказалось отличным
                         от нуля. В этом случае последующие директивы #elif
                         и #else игнорируются. После #elif  допускаются  те
                         же константные_выражения, что и после #if.

                    #else
                         Следующие после #else строки копируются в выходной
                         файл, если проверка  предшествующих  условий  дала
                         результат "ложь" (0). После #else запрещается рас-
                         полагать другие лексемы.

                    Условные директивы и необязательные директивы #else мо-
                    гут быть вложены.

            ФАЙЛЫ
                    INCDIR          Стандартный список каталогов для поиска
                                    включаемых файлов, обычно /usr/include.
                    LIBDIR          Обычно это /lib.

            СМ. ТАКЖЕ
                    cc(1), lint(1), m4(1).

            ДИАГНОСТИКА
                    Сообщения  об  ошибках, формируемые cpp, не нуждаются в
                    пояснениях.  Вместе  с  диагностикой  печатаются  номер
                    строки и имя файла, где встретилась ошибка.

            ПРИМЕЧАНИЯ
                    Когда в списке аргументов раскрываемых макроопределений
                    встречались символы перевода строки, предыдущие  версии
                    cpp, раскрывая макроопределения, эти символы подставля-
                    ли. Текущая версия cpp заменяет символы перевода строки
                    на пробелы, чтобы смягчить проблемы, с которыми сталки-
                    вались предыдущие версии.

                    Неподдерживаемая опция -W позволяет использовать дирек-
                    тивы #class. Если такая директива встретилась в  файле,
                    cpp, выполнив другие директивы, завершается с кодом 27.
                    Опция задумана для реализации классов в языке C.

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

			   #include 

                    следует предпочесть явному указанию полного имени:

			   #include "/usr/include/file.h"

                    В случае использования полных имен cpp  выдает  предуп-
                    реждения.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк