2. Директивы Препроцессора
Большинство возможностей препроцессора реализуется с использованием
специальных директив.
Директивами препроцессора являются строки, начинающиеся с символа '#',
за которым следует идентификатор, называемый именем директивы. Разрешается
использование пробелов перед и после символа '#'.
Существует строгий набор директив. Программы не могут определять новые
директивы.
Некоторые директивы требуют наличия аргументов, которыми является
оставшаяся часть строки отделенная от имени директивы одним или несколькими
пробелами.
Обычно, директива препроцессора не может занимать более одной строки.
Хотя, она может быть разбита с помощью последовательности backslash-newline.
Комментарии, содержащие перенос строки, также разбивают директиву на
несколько строк, но перед обработкой директивы все комментарии заменяются
пробелами. Если символ переноса строки находится внутри символьной или
строковой константы, то препроцессор обрабатывает последующие строки, как
ничем не связанные с предыдущей.
Символ '#' и имя директивы не происходят от макрорасширения. Например,
если 'foo' является параметром директивы 'define', то это не значит, что
'#foo' это директива препроцессора.
3. Подключаемые файлы
Подключаемый файл это файл, содержащий определения функций и переменных,
а также макроопределения вместе с некоторыми исходными файлами. Для
использования в программе подключаемых файлов применяется директива
препроцессора '#include'.
3.1. Использование подключаемых файлов.
Подключаемые файлы используются для двух целей:
Системные подключаемые файлы используются для определения интерфейсов
к составляющим операционной системы. Они подключаются для предоставления
объявлений и определений, требуемых для работы с системными вызовами и
библиотеками.
Подключаемые файлы пользователя содержат определения для интерфейсов
между исходными файлами программы.
Включение подключаемого файла в программу дает такой же результат, как
при копировании этого файла в каждый исходный файл этой программы. Подобное
копирование занимает много времени и побуждает возникновение ошибок. При
использовании подключаемых файлов все объявления и определения переменных и
функций находятся в одном файле и при необходимости могут быть изменены.
Обычно подключаемые файлы заканчиваются на '.h' и следует избегать
использования других стандартов.
3.2. Директива '#include'.
Как файлы пользователя, так и системные файлы включаются в программу с
использованием директивы препроцессора '#include'. Она имеет три модификации:
'#include <FILE>'
Эта модификация используется для подключения системных файлов. При ее
выполнении производится поиск файла с именем FILE в списке указанных заранее
каталогов, а затем в стандартном списке системных каталогов. С помощью
опции '-I' указываются каталоги для поиска подключаемых файлов. Опция
'-nostdinc' запрещает поиск в стандартных системных каталогах и производит
поиск только в указанных каталогах.
Синтаксис такой модификации директивы '#include' довольно специфичен,
потому как комментарии внутри '<...>' не распознаются. Поэтому в строке
'#include <x/*y>' последовательность символов '/*' не начинает комментарий,
а указанная директива включает в программу файл с именем 'x/*y'.
Аргумент FILE не может содержать символа '>', хотя он может содержать
символ '<'.
'#include "FILE"'
Эта модификация применяется для подключаемых файлов для программ
пользователя. Сначала файл FILE просматривается в текущем каталоге, а затем
в каталогах для системных подключаемых файлов. Текущим каталогом является
каталог текущего обрабатываемого файла. Он просматривается в первую очередь,
так как предполагается, что в нем находятся файлы, имеющие отношение к
текущему обрабатываемому файлу. (Если указана опция '-I-', то текущий
каталог не просматривается.)
Аргумент FILE не может содержать символов '"'. Символы backslash
интерпретируются как отдельные символы, а не начало escape
последовательности. Таким образом, директива '#include "x\n\\y"' указывает
имя файла, содержащего три символа backslash.
'#include ANYTHING ELSE'
Эта модификация называется "вычисляемой директивой #include". Любая
директива '#include', не соответствующая ни одной из модификаций,
рассмотреных выше, является вычисляемой директивой. Строка ANYTHING ELSE
проверяется на наличие соответствующего макроса, значение которого затем
заменяет его название. Полученная в результате строка должна уже
в точности соответствовать одной из рассмотренных выше модификаций (то есть
имя подключаемого файла должно быть заключено в кавычки или угловые скобки).
Эта возможность позволяет определять макросы, что дает возможность
изменять имена подключаемых файлов. Эта возможность, например, используется
при переносе программ с одной операционной системы на другие, где требуются
разные подключаемые файлы.
... 1-12. Напишите программу, печатающую гистограмму длин слов из файла ввода. Самое легкое - начертить гистограмму горизон- тально; вертикальная ориентация требует больших усилий. 1.7. Функции. В языке “C” функции эквивалентны подпрограммам или функ- циям в фортране или процедурам в PL/1, паскале и т.д. Функ- ции дают удобный способ заключения некоторой части вычисле- ний в черный ...
... , сложны для понимания и абсолютно непрозрачны, а возможности существенно уступают Форту и Лиспу. В общем, муть и мрак. Вавилонское столпотворение Всякий раз, когда появляется очередной новый язык, о котором говорят, как об «окончательном и безальтернативном», предрекая скорую смерть всех остальных, мне становится смешно. Сам по себе язык в отрыве от среды программирования —малоинтересен, да и все ...
... программе. В данном разделе они перечислены в алфавитном порядке и приводятся с объяснениями. Эти ошибки могут являться следствием случайного затирание памяти программой. Abnormal program termination Аварийное завершение программы Данное сообщение может появляться, если для выполнения программы не может быть выделено достаточного количества памяти. Более подробно оно рассматривается в конце ...
... доступа с записью равной байту. Такие файлы называются двоичными. Файлы прямого доступа незаменимы при написании программ, которые должны работать с большими объемами информации, хранящимися на внешних устройствах. В основе обработке СУБД лежат файлы прямого доступа. Кратко изложим основные положения работы с файлами прямого доступа. 1). Каждая запись в файле прямого доступа имеет свой номер ...
0 комментариев