Unix Man (Справочное руководство)


CPP(1) - часть 2


/p>

Выделено два специальных имени. Имя __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.




Начало  Назад  Вперед