Прототип функции
Эта статья нуждается в дополнительных цитатах для проверки . ( сентябрь 2016 г. ) |
В компьютерном программировании прототип функции — это объявление функции , в котором указывается имя функции и сигнатура типа ( арность , типы данных и параметров тип возвращаемого значения ), но отсутствует тело функции. В то время как определение функции определяет, как функция делает то, что она делает («реализация»), прототип функции просто определяет ее интерфейс, т. е. какие типы данных входят в нее и выходят из нее. Термин «прототип функции» особенно используется в контексте языков программирования C и C++ , где размещение предварительных объявлений функций в заголовочных файлах позволяет разделить программу на единицы трансляции , то есть на части, которые компилятор может отдельно преобразовать в объектные файлы . быть объединенным компоновщиком в исполняемый файл или библиотеку . Объявление функции предшествует определению функции и содержит сведения об имени, типе возвращаемого значения и классе хранения, а также других соответствующих атрибутах. [1]
Прототипы функций можно использовать в следующих случаях: [2]
- Определение внешнего типа
- Создание части интерфейса
В прототипе имена параметров не являются обязательными (а в C/C++ они имеют область действия прототипа функции , что означает, что их область действия заканчивается в конце прототипа), однако тип необходим вместе со всеми модификаторами (например, если это указатель или ссылка на константный параметр), кроме только константа .
В объектно-ориентированном программировании интерфейсы и абстрактные методы служат одной и той же цели.
Пример
[ редактировать ]Рассмотрим следующий прототип функции:
void sum(int a, int b);
или
void sum(int, int);
или
auto sum(int, int) -> void; // C++ only
Прототипы функций включают сигнатуру функции, имя функции, тип возвращаемого значения и спецификатор доступа. В данном случае имя функции — «Сумма». Сигнатура функции определяет количество параметров и их типы. Тип возвращаемого значения — «void». Это означает, что функция не будет возвращать никакого значения. Обратите внимание, что имена параметров в первом примере не являются обязательными.
Использование
[ редактировать ]В ранних версиях C, если функция ранее не была объявлена и ее имя встречалось в выражении, за которым следовала левая скобка, она неявно объявлялась как функция, возвращающая int
и ничего не предполагалось в отношении его аргументов. В этом случае компилятор не сможет выполнить проверку правильности количества и типов аргументов во время компиляции.
Стандарт C99 требует использования прототипов.
char MyFunction(int a); /* Function prototype */
#include <stdio.h>
#include <limits.h>
int main(void)
{
putchar(MyFunction(-1)); /* Correctly formatted call */
putchar(MyFunction(1.5)); /* Compiler generates a warning because of type mismatch */
putchar(MyFunction("IncorrectArgType")); /* Compiler will generate a warning */
putchar(MyFunction()); /* Compiler will generate an Error too few arguments */
int one = 1;
putchar(MyFunction(INT_MAX + one)); /* Although adding 1 to the maximum integer
/* is an error it cannot be detected at compile time */
return 0;
}
char MyFunction(int n) /* Function definition */
{
if (n > 0) return '>';
if (n < 0) return '<';
return '=';
}
Функция MyFunction ожидает вызова с целочисленным аргументом. Включая прототип функции, вы сообщаете компилятору, что функция принимает один целочисленный аргумент, и позволяете компилятору перехватывать неправильно указанные вызовы.
Создание интерфейсов библиотеки
[ редактировать ]Помещая прототипы функций в файл , можно указать интерфейс библиотеки заголовочный .
Объявление класса
[ редактировать ]В C++ прототипы функций также используются в определениях классов .
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ ТайлерMSFT (25 января 2023 г.). «Прототипы функций» . Learn.microsoft.com . Проверено 9 августа 2023 г.
- ^ «Прототипы функций» . www.ibm.com . 25 октября 2018 г. Проверено 9 августа 2023 г.
- Керниган, Брайан В .; Ричи Афри, Деннис М. (1988). Язык программирования C (2-е изд.). Река Аппер-Сэддл, Нью-Джерси: PTR Prentice Hall. ISBN 0-13-110362-8 .