R Справочное руководство по С++

R.3.4 Начало и окончание программы.

   


Назад  |  Вперёд

Программа должна содержать функцию с именем main(). Ей приписывается роль начала программы. Эта функция не является предопределенной для транслятора, она не может быть перегружена, а ее тип зависит от реализации. Предполагается, что любая реализация должна допускать два приведенных ниже определения и что можно добавлять после argv любые параметры. Функция main может определяться так

           int main() { /* ... */ }

или

           int main(int argc, char* argv[]) { /* ... */ }

В последнем определении argc задает число параметров, передаваемых программе окружением, в котором она выполняется. Если argc не равно нулю, параметры должны передаваться как строки, завершающиеся символом '\0', с помощью argv[0] до argv[argc-1], причем argv[0] должно быть именем, под которым программа была запущена, или "". Должно гарантироваться, что argv[argc]==0.

Функция main() не должна вызываться в программе. Связывание main() ($$R.3.3) зависит от реализации. Нельзя получать адрес main() и не следует описывать ее как inline или static.

Вызов функции

           void exit(int);

описанной в <stdlib.h>, завершает программу. Значение параметра передается окружению программы в качестве результата программы.

Инициализация нелокальных статических объектов ($$R.3.5) единицы трансляции происходит прежде первого обращения к функции или объекту, определенному в этой единице трансляции. Эта инициализация ($$R.8.4, $$R.9.4, &&R.12.1, $$R.12.6.1) может быть проведена перед выполнением первого оператора main() или отложена до любого момента, предшествующего первому использованию функции или объекта, определенных в данной единице трансляции. Все статические объекты по умолчанию инициализируются нулем ($$R.8.4) прежде любой динамической (во времени выполнения программы) инициализации. Больше никаких требований на порядок инициализации объектов из различных единиц трансляции не налагается. Инициализация локальных и статических объектов описана в $$R.8.4.

Деструкторы ($$R.12.4) для инициализированных статических объектов вызываются при возврате из main() или при вызове exit(). Уничтожение происходит в обратном порядке по сравнению с инициализацией. С помощью функции atexit() из <stdlib.h> можно указать функцию, которую нужно вызывать при выходе из программы. Если было обращение к функции atexit(), объекты, инициализированные до вызова atexit(), не должны уничтожаться до тех пор, пока не произойдет вызов функции, указанной в atexit(). Если реализация С++ сосуществует с реализацией С, все действия, которые должны были произойти после вызова функции, заданной в atexit(), происходят только после вызова всех деструкторов.

Вызов функции

           void abort();

описанной в <stdlib.h>, завершает программу без выполнения деструкторов статических объектов и без вызова функций, заданных в atexit().


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.