Прототип функцииПрототипом функции в языке Си или C++ называется объявление функции, не содержащее тела функции, но указывающее имя функции, арность, типы аргументов и возвращаемый тип данных. В то время как определение функции описывает, что именно делает функция, прототип функции может восприниматься как описание её интерфейса. В прототипе имена аргументов являются необязательными, тем не менее, необходимо указывать тип вместе со всеми модификаторами (например, указатель ли это или константный аргумент). ПримерВ качестве примера, рассмотрим следующий прототип функции: int foo(int n);
Этот прототип объявляет функцию с именем «foo», которая принимает один аргумент «n» целого типа и возвращает целое число. Определение функции может располагаться где угодно в программе, но объявление требуется только в случае её использования. ИспользованиеУведомление компилятораЕсли функция предварительно не была объявлена, а её имя встречается в выражении, сразу за которым следует открывающая скобка, то она неявно объявляется как функция, возвращающая результат типа #include <stdio.h>
/*
* При реализации этого прототипа компилятор выдаст сообщение об ошибке
* в main(). Если он будет пропущен, то и сообщения об ошибке не будет.
*/
int foo(int n); /* Прототип функции */
int main(void) /* Вызов функции */
{
printf("%d\n", foo()); /* ОШИБКА: у foo отсутствует аргумент! */
return 0;
}
int foo(int n) /* Вызываемая функция */
{
if (n == 0)
return 1;
else
return n * foo(n - 1);
}
Функция «foo» ожидает аргумент целого типа. Если прототип пропущен, компилятор не может это обработать и «foo» завершит операцию на некоторых других данных стека (вероятно, это будет обратный адрес или значение переменной, не входящей в область допустимых значений). Включением прототипа функции вы информируете компилятор о том, что функция «foo» принимает один аргумент целого типа и вы тем самым позволяете компилятору обрабатывать подобные виды ошибок. Создание библиотечных интерфейсовПутём помещения прототипов функций в заголовочный файл можно описывать интерфейс для библиотек. Объявления классаВ C++ прототипы функций также используются в определении классов. См. такжеЛитература
|
Portal di Ensiklopedia Dunia