Прототипы функций C++

.

Прототип объявляет функцию до ее первого использования.
До сих пор в приводимых здесь примерах программ прототипы функций использовались без каких-либо разъяснений. Теперь настало время поговорить о них подробно. В C++ все функции должны быть объявлены до их использования. Обычно это реализуется с помощью прототипа функции. Прототипы содержат три вида информации о функции:
■ тип возвращаемого ею значения;
■ тип ее параметров;
■ количество параметров.


Прототипы позволяют компилятору выполнить следующие три важные операции.
■ Они сообщают компилятору, код какого типа необходимо генерировать при вызове функции. Различия в типах параметров и значении, возвращаемом функцией, обеспечивают различную обработку компилятором.
■ Они позволяют C++ обнаружить недопустимые преобразования типов аргументов, используемых при вызове функции, в тип, указанный в объявлении ее параметров, и сообщить о них.
■ Они позволяют компилятору выявить различия между количеством аргументов, используемых при вызове функции, и количеством параметров, заданных в определении функции.
Общая форма прототипа функции аналогична ее определению за исключением того, что в прототипе не представлено тело функции.

type func_name (type parm_name1, type parm_name2,

...,

type parm_nameN);
Использование имен параметров в прототипе необязательно, но позволяет компилятору идентифицировать любое несовпадение типов при возникновении ошибки, поэтому лучше имена параметров все же включать в прототип функции.
Чтобы лучше понять полезность прототипов функций, рассмотрим следующую программу. Если вы попытаетесь ее скомпилировать, то получите от компилятора сообщение об ошибке, поскольку в этой программе делается попытка вызвать функцию sqr_it () с целочисленным аргументом, а не с указателем на целочисленное значение (согласно прототипу функции). Ошибка состоит в недопустимости преобразования целочисленного значения в указатель.

/* В этой программе используется прототип функции, который позволяет осуществить строгий контроль типов.

*/

void sqr_it (int *i); // прототип функции

int main ()

{

int х;

х = 10;

sqr_it (x); // *** Ошибка *** — несоответствие типов!

return 0;

}

void sqr_it (int *i)

{

*i=*i * *i;

}
Важно! Несмотря на то что язык С допускает прототипы, их использование не является обязательным. Дело в том, что в первых версиях С они не применялись. Поэтому при переводе старого С-кода в С++-код перед компиляцией программы необходимо обеспечить наличие прототипов абсолютно для всех функций.

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.