|
Программирование >> Структурное программирование
Резюме Во многих операционных системах, в частности, в UNIX и DOS, имеется возможность переназначить (переадресовать) ввод в программу и вывод из программы. В UNIX и DOS переназначение ввода производится из командной строки при помощи знака переназначения ввода (<) или знака конвейера (I). В UNIX и DOS переназначение вывода производится из командной строки при помощи знака переназначения вывода (>) или знака добавления вывода ( ). Знак переназначения вывода просто помещает вывод программы в файл, а символ добавления вывода дописывает вывод программы в конец файла. Макросы и определения заголовочного файла stdarg.h, посвященного списку параметров переменной длины, обеспечивают возможности, необходимые при построении функций со списками параметров переменной длины. Знак многоточия (...) в прототипе функции указывает на то, что функция получает список параметров переменной длины. Тип va list предназначен для хранения информации, необходимой макросам va start, va arg и va end. Для обработки параметров из списка параметров переменной длины необходимо объявлять объект этого типа. Макрос va start должен вызываться перед обработкой списка переменного числа параметров. Макрос инициализирует объект типа va list для последующего использования его макросами va arg и va end. Макрос va arg расширяется до выражения, которое имеет тип и значение следующего параметра в списке параметров переменной длины. Каждый вызов va arg изменяет значение объекта типа va list таким образом, что он ссылается на следующий по списку параметр. быть успешно с ней связаны. Системы программирования на С++ обычно включают в себя перекомпилированные стандартные библиотеки языка С; в этом случае использование спецификаций связывания для вызова таких функций не требуется. 18.14. За1а1ючительные замечания Мы искренне надеемся, что изучение С++ и объектно-ориентированного программирования с помощью этого курса доставило вам удовольствие. Будущее кажется безоблачным и мы желаем вам успехов в погоне за ним1 - Мы были бы очень признательны Вам за комментарии, критику, сообщения о замеченных ошибках и предложения по улучшению текста книги. Мы упомянем всех внесших свой вклад в следующем издании книги. Пожалуйста, присылайте Ваши сообщения на наш адрес email: deitelSworld.std.com Желаем удачи! Макрос va end обеспечивает нормальное возвращение из функции, в которой для обработки списка параметров неременной длины использовался макрос va start. Во многих операционных системах, в частности, в DOS и UNIX, имеется возможность передачи аргументов в функцию main из командной строки, если в список параметров main включить параметры int argc и char *argv[ ]. Параметр argc получает значение, равное количеству аргументов командной строки. Параметр argv - это массив строк, в который помещаются значения аргументов командной строки. Описание функции должно полностью содержаться в одном файле, оно не может распространяться на два или большее число файлов. Глобальные переменные должны быть объявлены в каждом файле, в котором они используются. Прототипы функций могут расширять область действия функции за пределы файла, в котором она определена (при этом в прототипе функции не требуется использовать спецификатор extern). В каждый файл, в котором вызывается функция из другого файла, нужно включить прототип этой функции и откомпилировать эти файлы. Спецификатор класса памяти static, если его применить к глобальной переменной или функции, ограничит их использование только функциями, определенными в том же самом файле. Это называется внутренним связыванием. Глобальные переменные и функции, при объявлении которых не использовался спецификатор static, имеют внешнее связывание, т. е. к ним можно обращаться из других файлов, если те файлы содержат соответствующие объявления и прототипы функций. Спецификатор static обычно применяется к вспомогательным функциям (утилитам), которые вызываются только функциями из текущего файла. Если функция не нужна нигде более, кроме файла, в котором она определена, то следуя принципу минимизации привилегий эту функцию нужно объявлять со спецификатором static. При написании программ, состоящих из большого числа исходных файлов, компилляция программы может сделаться утомительным делом, поскольку даже в случае небольших изменений в одном файле вся программа должна быть перекомпилирована. Многие системы программирования имеют специальные утилиты, которые перекомпилируют только измененный файл программы. В системах UNIX такая утилита называется make. Утилита make использует при своей работе файл с именем makefile, который содержит инструкции для компиляции и связывания программы. Функция exit вызывает нормальное завершение программы. Функция atexit регистрирует функцию, которая будет вызываться при нормальном завершении программы, т. е., когда программа завершается по достижении конца функции main, или когда вызывается функция exit. Функция atexit принимает в качестве параметра указатель на функцию (т. е. имя функции). Функции, вызываемые при завершении программы, не должны иметь параметров и не могут возвращать значение. Может быть зарегистрировано до 32 функций, выполняющихся при завершении программы. Функция exit имеет один параметр. Обычно в качестве аргумента используются символические константы EXIT SUCCESS или EXIT FAILURE. Если exit вызывается со значением EXIT SUCCESS, то программа возвращает исполняющей системе значение нормального завершения программы, определяемое реализацией системы. Если exit вызывается с аргументом EXIT FAILURE, то возвращается определяемое реализацией системы значение, соответствующее аварийному завершению программы. При выполнении функции exit вызываются функции, предварительно зарегистрированные функцией atexit в порядке, обратном порядку их регистрации; все потоки, связанные с программой, очищаются и закрываются и управление возвращается среде выполнения. В расширенном стандарте С-Н- сказано, что при модификации типа спецификатором volatile способ доступа к объекту такого типа зависит от реализации. Кернигана и Ричи отмечают, что спецификатор volatile используется для подавления различных видов оптимизации. Для определения типов целочисленных и вещественных констант в С++ используются суффиксы. Целочисленные суффиксы: и или U для целого без знака (unsigned); 1 или L для длинного целого (long); ul или UL для длинного целого без знака (unsigned long). Если целочисленная константа задана без суффикса, то ее тип определяется первым типом, способным разместить значение такого размера (типы просматриваются в следующем порядке: сначала int, затем long int, затем unsigned long int). Для констант с плавающей запятой имеются следующие суффиксы: f или F для типа float; 1 или L для типа long double. Вещественная константа, определенная без суффикса, автоматически имеет тип double. Библиотека обработки сигналов содержит функцию signal, перехватывающую непредвиденные события. Функция signal получает два параметра: целочисленный номер сигнала и указатель на функцию обработки сигнала. Сигналы могут генерироваться функцией raise, которая получает целочисленное значение номера сигнала в качестве аргумента. Библиотека утилит общего назначения (stdlib.h) содержит функции динамического выделения памяти calloc и realloc. Эти функции могут использоваться для создания и изменения размера динамических массивов. Функция calloc имеет два параметра: число элементов (nmemb) и размер каждого элемента (size). Элементам массива присваиваются нулевые начальные значения. Функция возвращает указатель на выделенную память, или нулевой указатель (0), если память не выделена. Функция realloc изменяет размер объекта, память под который была выделена предыдущим обращением к функциям malloc, calloc или realloc. Содержимое объекта не изменяется при условии, что выделяемый объем памяти больше, чем предыдущий размер массива.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |