logo search
Подбельский Фомин_Программирование на языке СИ_

Описание функции и ее тип.

Описание функции и ее тип. Для корректного обращения к функции сведения о ней должны быть известны компилятору, т.е. до вызова функции в том же файле стандартом рекомендуется помещать ее определение или описание. Двум формам (стандартной и старомодной) определения функции соответствуют две формы их описания. Для функции, определенной стандартным образом, описанием служит ее прототип:

тип имя_функции (спецификация_параметров);

В отличие от заголовка функции в ее прототипе могут не указываться имена формальных параметров. Например, допустимы и эквивалентны следующие прототипы одной и той же функции:

При старом формате определения функции используется старомодный способ описания функции, не содержащий спецификации параметров:

тип имя_функции ( );

Например, для некоторой функции old() в программе может быть использовано следующее описание:

При таком описании функции компилятор ничего "не знает" о типах ее параметров и не сможет выполнить проверку совместимости списков фактических и формальных параметров. Поэтому рекомендуется для описания функции всегда применять ее прототип, что возможно только при стандартном определении функции.

Прототип очень плохо заменяется старомодным описанием функции, особенно при необходимости использовать ее тип в определении того или иного элемента программы. Тип функции складывается из типа возвращаемого значения и спецификации параметров. Например, рассмотрим стандартный прототип и старомодное описание:

Тип функции f( ) - это функция, возвращающая значения типа double и имеющая параметры типов int и float. Тип функции w( ) (вводимый старомодным описанием) опознать практически невозможно. Служебное слово void определяет только тип возвращаемого значения. Таким образом, w() - это функция, не возвращающая значения и имеющая неизвестное количество параметров неизвестного типа. Именно поэтому при определении типа "функция" нужно всегда использовать прототип, а не старомодное описание.