Прототип функции - Function prototype
эта статья нужны дополнительные цитаты для проверка.Сентябрь 2016) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В компьютерное программирование, а прототип функции или функциональный интерфейс это декларация из функция который определяет имя функции и подпись типа (арность, типы данных из параметры, и тип возврата ), но опускает тело функции. Хотя определение функции указывает как функция делает то, что делает («реализация»), прототип функции просто указывает ее интерфейс, т.е. какая типы данных входят и выходят из него. Термин "прототип функции" особенно используется в контексте языков программирования. C и C ++ где размещение предварительные объявления функций в файлы заголовков позволяет разбить программу на единицы перевода, т.е. на части, которые компилятор можно отдельно перевести на объектные файлы, которые будут объединены компоновщик в исполняемый файл или библиотека.
В прототипе имена параметров являются необязательными (а в C / C ++ имеют область действия прототипа функции, что означает, что их область действия заканчивается в конце прототипа), однако тип необходим вместе со всеми модификаторами (например, если это указатель или const параметр ).
В объектно-ориентированного программирования, интерфейсы и абстрактные методы служат той же цели.
пример
Рассмотрим следующий прототип функции:
пустота Сумма( int а, int б );
ИЛИ ЖЕ
пустота Сумма( int, int );
Прежде всего, прототипы функций включают подпись функции, имя функции, тип возвращаемого значения и спецификатор доступа. В этом случае имя функции - «Сумма». Сигнатура функции определяет количество параметров и их типы. В приведенном выше примере тип возвращаемого значения - void. Это означает, что функция не вернет никакого значения. Обратите внимание, что имена параметров в первом примере необязательны.
Использует
В более ранних версиях C, если функция не была ранее объявлена и ее имя встречалось в выражении, за которым следовала левая скобка, она неявно объявлялась как функция, возвращающая int
и ничего не предполагалось относительно его аргументов. В этом случае компилятор не сможет выполнить проверку типов аргументов и синтаксиса во время компиляции. арность когда функция была применена к некоторым аргументам. Это может вызвать проблемы. Следующий код иллюстрирует ситуацию, в которой поведение неявно объявленной функции неопределенный.
#включают <stdio.h>/ * Если этот прототип предоставлен, компилятор обнаружит ошибку в * | главная |. Если его опустить, то ошибка может остаться незамеченной. */int Моя функция(int п); /* Прототип */int основной( пустота ) / * Вызов функции * /{ printf("% d п", Моя функция()); / * Ошибка: забыл аргумент MyFunction * / вернуть 0;}int Моя функция( int п ) / * Определение вызываемой функции * /{ если (п == 0) { вернуть 1; } еще { вернуть п * Моя функция(п - 1); }}
Функция Моя функция ожидает, что целочисленный аргумент будет на стек или в регистр когда это называется. Если прототип не указан, у компилятора не будет возможности обеспечить это и Моя функция в конечном итоге будет работать с некоторыми другими данными в стеке (возможно, обратный адрес или значение переменной, которой в данный момент нет в объем ). Включая прототип функции, вы сообщаете компилятору, что функция Моя функция принимает один целочисленный аргумент, и вы позволяете компилятору перехватывать такие ошибки и обеспечивать бесперебойную работу процесса компиляции. Эта функция была удалена из C99 стандартная, поэтому пропуск прототипа функции приведет к ошибке компиляции.
Создание библиотечных интерфейсов
Поместив прототипы функций в заголовочный файл можно указать интерфейс для библиотека.
Объявление класса
В C ++ прототипы функций также используются в класс определения.
Смотрите также
Рекомендации
- Керниган, Брайан В.; Ричи Афри, Деннис М. (1988). Язык программирования C (2-е изд.). Река Аппер Сэдл, Нью-Джерси: Prentice Hall PTR. ISBN 0-13-110362-8.