Функции. Основные принципы структурной методологии. Принцип формальности. Принцип иерархического упорядочивания, страница 13

time(&t);                 // функция time () возвращает текущую дату в виде количества секунд

cout <<ctime(&t)<< endl;          //функция ctime () возвращает строку, в которую                                                       // преобразует текущую дату  

cout << clock()/CLOCKS_PER_SEC << endl;  //вывод времени работы программы в сек.

};

Результат работы программы:

При завершении программы выводятся текущие дата и время.

Если для работы atexit () вызывается несколько функций, то они выполняются в порядке обратном порядку вызова:

atexit(f1);

atexit(f2);   //сначала выполнится f2, затем – f1.

Дополнительные возможности функций

Встраиваемые функции

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

// демонстрация inline-функций

#include <iostream.h>

inline double lbstokg (float pounds)  // функция конвертирует фунты в килограммы    

{                              

return 0.453592 * pounds;

}

//-------------------------------------------------------------int main()                         

   {                              

float lbs;

cout << "\n Enter your weight in pounds: ";

cin >> lbs;

cout << "Your weight in kilograms is " << lbstokg (lbs)

<< endl;

return 0;

   }

Результаты работы

Enter your weight in pounds: 3.5

Your weight in kilograms is 1.58757

Параметры по умолчанию

Чтобы упростить вызов функции, в ее заголовке (либо в прототипе, либо при определении функции) можно указать значения параметров по умолчанию:

int f (int a, int b=0);

void f1 (int, int=20*5, char*  =0);

void err (int errValue = errno);

……

f(100);  f(a,1);

f1(a);   f1(a, 10);    f1(a,  10,  “Vasia”);

//f1(a,  , “Vasia”);                                       неверно!!!!!

При передаче параметров по умолчанию необходимо руководствоваться следующими правилами:

·  значение по умолчанию может быть задано либо в прототипе, либо при определении функции, но только в одном месте один раз;

·  в качестве умалчиваемых значений должны быть либо константы, либо выражения, либо глобальные переменные;

·  параметры  со значениями по умолчанию должны быть последними в списке;

·  если при вызове функции опустили аргумент для параметра по умолчанию, то не надо писать аргумент и для всех оставшихся в списке;

·  в качестве параметра по умолчанию можно использовать и строку.

Параметры по умолчанию должны быть последними в списке параметров и могут опускаться при вызове функции. Если при вызове функции аргумент опущен, должны быть опущены и все аргументы, следующие за ним.

// демонстрация функции с параметрами по умолчанию

#include <iostream.h>

void repchar(char='*', int=45);   //прототип функции с параметрами по умолчанию

int main()

   {

repchar();                      //вызов функции с двумя аргументами по умолчанию                                            //печать  45 символов «звездочка»

repchar('=');                  //вызов функции с заданным первым аргументом                                            //печать 45 знаков «равно»

repchar('+', 30);            //вызов функции с двумя заданными аргументами                                            //печать  30 знаков «плюс»

return 0;