Читать «Занимательно о микроконтроллерах» онлайн - страница 184
Александр Владимирович Микушин
Если прототип не задан, а встретился вызов функции, то строится неявный прототип из анализа формы вызова функции. Тип возвращаемого значения создаваемого прототипа — int, а список типов и числа параметров функции формируется на основании типов и числа фактических параметров, используемых при данном вызове.
Учитывая, что построенный прототип функции может не совпасть с определением, лучше не надеяться на автоматическое построение прототипа, а объявлять его явным образом.
Наличие в прототипе полного списка типов параметров позволяет выполнить проверку соответствия типов фактических параметров при вызове функции типам формальных параметров, и, если необходимо, выполнить соответствующие преобразования.
Вызов функции имеет следующий формат:
Адресное выражение '(' [Список выражений]')'
Поскольку синтаксически имя функции является адресом начала тела функции, в качестве обращения к функции может быть использовано
Фактический параметр может быть величиной любого основного типа, структурой, объединением, перечислением или указателем на объект любого типа. Массив и функция не могут быть использованы в качестве фактических параметров, но можно использовать указатели на эти объекты.
Выполнение вызова функции происходит следующим образом:
1. Вычисляются выражения в
2. Происходит присваивание значений фактических параметров соответствующим формальным параметрам.
3. Управление передается на первый оператор функции.
4. Выполнение оператора return в теле функции возвращает управление и, возможно, значение в вызывающую функцию. При отсутствии оператора return управление возвращается после выполнения последнего оператора тела функции, а возвращаемое значение не определено.
Пример объявления переменной указателя на функцию:
int (*fun)(int x, int *y);
Здесь объявлена переменная fun как указатель на функцию с двумя параметрами типа int и указателем на int. Сама функция должна возвращать значение типа int. Круглые скобки, содержащие имя указателя fun и признак указателя *, обязательны, иначе запись