Программирование >>  Структурное программирование 

1 ... 306 307 308 [ 309 ] 310 311 312 ... 342


18.6. Завершение программы при помощи функций

exit и atexit

Библиотека утилит общего назначения (stdlib.h) предоставляет методы завершения выполнения программы, отличные от стандартного выхода из функции main с помощью оператора return. Функция exit вызывает нормальное завершение программы. Функция часто используется для завершения программы в случаях, когда произошла ошибка ввода, или если файл, который программа должна обработать, не может быть открыт. Функция atexit регистрирует функцию, которая будет вызываться при нормальном завершении программы, т. е., когда программа завершается по достижении конца функции main, или когда вызывается функция exit.

Функция atexit принимает в качестве параметра указатель на функцию (т. е. имя функции). Функции, вызываемые при завершении программы, не должны иметь параметров и не могут возвращать значение. Может быть зарегистрировано до 32 функций, выполняющихся при завершении программы.

Функция exit имеет один параметр. Обычно в качестве аргумента используются символические константы EXIT SUCCESS или EXIT FAILURE. Если exit вызывается со значением EXIT SUCCESS, то программа возвращает исполняющей системе значение нормального завершения программы, определяемое реализацией системы. Если exit вызывается с аргументом EXIT FAILURE, то возвращается определяемое реализацией системы значе-

файлов, если те файлы содержат соответствующие объявления и прототипы функций.

При объявлении глобальной переменной

static float pi = 3.14159;

создается переменная pi типа float со значением 3.14159, которая будет видна только функциям того файла, в котором она определена.

Спецификатор static обычно применяется к вспомогательным функциям (утилитам), которые вызываются только функциями из текущего файла. Если функция не нужна нигде более, кроме файла, в котором она определена, то следуя принципу минимизации привилегий эту функцию нужно объявлять со спецификатором static. Если функция описана в файле до того, как она используется, то static должен применяться в описании функции. В других случаях этот спецификатор нужно использовать в прототипе функции.

При написании программ, состоящих из большого числа исходных файлов, компиляция программы может сделаться утомительным делом, поскольку даже в случае небольших изменений в одном файле вся программа должна быть перекомпилирована. К счастью, многие системы программирования имеют специальные утилиты, которые перекомпилируют только измененный файл программы. В системах UNIX такая утилита называется make. Утилита make использует при своей работе файл с именем makeflle, который содержит инструкции для компиляции и связывания программы. Системы типа Borland С++ и Microsoft Visual С++ для персональных компьютеров, также, имеют утилиту make и, кроме того, имеют проекты . За подробной информацией по утилите make обращайтесь к руководству по вашей системе программирования.



mam i

atexit (print); регистрация функции print cout << Введите 1 для завершения программы функцией exit << endl

<< Введите 2 для нормального завершения программы << endl;

int answer; cin >> answer;

if (answer == 1) {

cout << endl << Завершение программы функцией exit

endl; exit(EXIT SUCCESS);

cout << endl << Завершение программы по достижении конца main << endl;

return 0;

void print(void)

** cout << Выполнение функции print при завершении программы s-Ji endl << Программа завершена << endl;

ние, соответствующее аварийному завершению программы. При выполнении функции exit вызываются функции, предварительно зарегистрированные функцией atexit в порядке, обратном порядку их регистрации; все потоки, связанные с программой, очищаются и закрываются и управление возвращается среде выполнения. В программе на рис. 18.4 показан пример использования функций exit и atexit. Программа предлагает пользователю определить, должна ли она завершаться вызовом exit или оператором return в конце функции main. Обратите внимание, что функция print выполняется при любом способе завершения программы.

18.7. Спецификатор типа volatile

в главах 4 и 5 мы представили вам спецификатор типа const. В С-Ь-1-имеется еще один спецификатор типа - volatile. В расширенном стандарте С-Н- (СЬ94) сказано, что когда используется спецификатор типа volatile, способ доступа к объекту такого типа зависит от реализации системы. По утверждению Кернигана и Ричи (Ке88), спецификатор volatile используется для подавления различных видов оптимизации.

Использование функций exit и atexit iclude <iostream.h> include <stdlib.h>

lid print (void) ;



18.8. Суффиксы целочисленных и вещественных

констант

Для определения типов целочисленных и вещественных констант в С++ используются суффиксы. Целочисленные суффиксы: и или U для целого без знака (unsigned); 1 или L для длинного целого (long); ul или UL для длинного целого без знака (unsigned long). Ниже приведены целочисленные константы типов unsigned, long и unsigned long соответственно:

174u

8358L

28373ul

Если целочисленная константа задана без суффикса, то ее тип определяется первым типом, способным разместить значение такого размера (типы просматриваются в следующем порядке: сначала int, затем long int, затем unsigned long int).

Для констант с плавающей запятой имеются следующие суффиксы: f или F для типа float; 1 или L для типа long double. Следующие константы имеют тип long double и float соответственно:

3.14159L 1.28f

Вещественная константа, определенная без суффикса, автоматически имеет тип double.

18.9. Обработка сигналов

Сигнал - это некоторое непредвиденное событие (прерывание), которое может вызвать преждевременное завершение программы. Перечислим некоторые из таких непредвиденных событий: прерывания (комбинация кла-

Введите 1 для завершения программы функцией exit Введите 2 для нормального зшершения программы 1

Зёшершение прогргшмы функцией exit Выполнение функции print при зшершении программы Программа завершена

Введите 1 для зшершения программы функцией exit Введите 2 для нормального зшершения программы 2

Зшершение программы по достижении конца main Выполнение функции print при згшершении прогргшмы Прогргшма завершена

Рис. 18.4. Использование функций exit и atexit (чааь 2 из 2)



1 ... 306 307 308 [ 309 ] 310 311 312 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика