Информатика и технология программирования


Области действия функцийОпределения и объявления


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



-имя функции;



-тип результата;



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

Вся перечисленная информация о функции находится в ее заголовке. Таким образом, достаточно этот заголовок привести отдельно, и проблема корректного вызова решается. Такой заголовок называется объявлением или в рассматриваемом нами варианте синтаксиса ПРОТОТИПОМ ФУНКЦИИ.

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


int B[10];
int sum(int s[],int n); // Объявление функции,


// определенной далее по тексту


extern int printf(char *,...);
// Объявление библиотечной функции


// с переменным числом параметров


extern int other(void); // Объявление функции без


// параметров из другого


void main() // файла программы


{ //


sum(B,10); // Вызовы объявленных функций


cout &#60&#60 B[i]);
other();
}
int sum(int s[], int n)



Начало  Назад  Вперед