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


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


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



-внешние функции: доступны во всех модулях программы;



-статические функции: доступны только в модуле, в котором они определены.

Все функции по умолчанию являются внешними. Это значит, что определенная стандартным образом функция может быть вызвана из любого другого модуля программы. При этом в модуле, в котором осуществляется вызов, она должна быть объявлена. Объявление внешней функции представляет собой заголовок функции, предваренный словом extern .

В самом же модуле, где функция определена, ее область действия распространяется от точки определения до конца файла. Если же требуется вызвать функцию ранее ее определения по тексту, то она также должна быть объявлена, но, возможно, и без слова extern:

.


Файл a.c Файл b.c

.


объявление функции в объявление внешней
собственном модуле функции
char *f(int,int); extern char *f(int,int);

.


область действия область действия
... f(10,n) ... ... f(15,m) ...
определение функции
char *f(int n1, int n2)
{ ... тело функции ... }

В объявлении функции возможны два варианта синтаксиса: обычный и прототип. В первом случае формальные параметры функции отсутствуют, во втором -имеется список параметров или их абстрактных типов. В первом случае при вызове функции контроль соответствия количества и типов формальных и фактических параметров не производится, во втором -производится на основе информации, почерпнутой транслятором из объявления (прототипа).

.


Обычное объявление Объявление по прототипу
int strcmp(); int strcmp(char* ,char*);
char getch(); char getch(void);

Статические функции имеют определение обычной внешней функции, предваренное словом static . Область действия такой функции не распространяется за пределы текущего модуля, извне обратиться к ним нельзя. Такие функции предназначены для создания собственных служебных функций модуля с тем, чтобы их имена не вступали в конфликт с такими же именами функций в других модулях.




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