Прототип функции

Прототип функции

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

В прототипе имена аргументов являются необязательными, тем не менее, необходимо указывать тип вместе со всеми модификаторами (например, указатель ли это или константный аргумент).

Содержание

Пример

В качестве примера, рассмотрим следующий прототип функции:

int foo(int n);

Этот прототип объявляет функцию с именем «foo», которая принимает один аргумент «n» целого типа и возвращает целое число. Определение функции может располагаться где угодно в программе, но определение требуется только в случае её использования.

Использование

Уведомление компилятора

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

#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++ прототипы функций также используются в определении классов.

Ссылки

  • Kernighan, Brian W. & Ritchie, Dennis M. (1988), «The C Programming Language» (2nd ed.), Upper Saddle River, NJ: Prentice Hall PTR, ISBN 0131103628 

См. также

  • Сигнатура типа

Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Прототип функции" в других словарях:

  • Прототип — (от др. греч. πρῶτος  первый и τύπος  отпечаток, оттиск; прообраз, образец), Prototype: Прототип (когнитивная психология)  абстрактный образ, воплощающий множество сходных форм одного и того же объекта или паттерна, наиболее… …   Википедия

  • прототип —         ПРОТОТИП (от греч. prototypon прообраз) в когнитивистике лучший представитель («лучший пример») когнитивной или языковой категории. Теория прототипов разрабатывалась параллельно в когнитивной психологии (Л.С. Выготский, Э. Рош),… …   Энциклопедия эпистемологии и философии науки

  • strcpy — strcpy  функция стандартной библиотеки языка программирования Си, для копирования нуль терминированной строки (включая нуль терминатор) в заданный буфер . Содержание 1 Прототип функции 2 Возвращаемое значение …   Википедия

  • WinMain — функция, в которой программист пишет основной код, который будет выполнять программа под Windows для подсистемы GUI. Эта функция вызывается из функции WinMainCRTStartup (находящейся в CRT), которая по умолчанию является точкой входа в программу… …   Википедия

  • Объявление (информатика) — Возможно, эта статья содержит оригинальное исследование. Добавьте ссылки на источники, в противном случае она может быть выставлена на удаление. Дополнительные сведения могут быть на странице обсуждения. (25 мая 2011) …   Википедия

  • Strcpy — функция стандартной библиотеки языка программирования Си, для копирования нуль терминированной строки в заданный буфер. Содержание 1 Прототип функции 2 Возвращаемое значение …   Википедия

  • Экспериментальная модель — Прототип (от греч. protos  первый и typos  отпечаток, оттиск)  прообраз, образец, оригинал. Прототип  м. греч. первообраз, начальный, основной образец, истинник. Прототипный, типический, первообразный, первообразцовый (Словарь Даля). Прототип  в… …   Википедия

  • D (язык программирования) — У этого термина существуют и другие значения, см. D. D Семантика: мультипарадигменный: императивное, объектно ориентированное, обобщённое программирование Тип исполнения: компилятор Появился в: 1999 Автор(ы) …   Википедия

  • Feof — feof  функция стандартной библиотеки языка Си, объявленная в заголовочном файле stdio.h. Ее основное назначение  отличать случаи, когда операции потока достигают конца файла, от случаев, когда возвращается код ошибки EOF («конец файла» …   Википедия

  • DLL — (англ. Dynamic link library  динамически подключаемая библиотека)  понятие операционных систем Microsoft Windows и IBM OS/2; динамическая библиотека, позволяющая многократное применение различными программными приложениями. K DLL… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»