Язык программирования C

Скачать в pdf «Язык программирования C»


double val[MAXVAL];


Благодаря этому определению выделяется память для хранения переменных. Кроме того, это еще и объявление, действительное до конца файла. С другой стороны, следующие строки дают только объявление, также действительное до конца файла, согласно которому sp имеет тип int, a val является массивом типа double (его размер определяется в другом месте). При этом память не выделяется и переменные не создаются, extern int sp; extern double val[];


Во всех файлах, образующих исходный текст программы, должно быть в общей сложности не больше одного определения внешней переменной; в других файлах могут содержаться объявления со словом extern, чтобы оттуда можно было к ней обращаться. (В файле, содержащем определение переменной, также могут находиться и extern-объявления ее же.) Размеры массивов обязательно указываются в определении, но необязательно — в объявлении со словом extern.


Инициализация внешней переменной выполняется только в определении.


Хотя в данной программе такая организация ни к чему, функции push и pop можно было бы определить в одном файле, а переменные val и sp — определить и инициализировать в другом. В итоге для связывания программы в единое целое понадобились бы следующие объявления и определения:


в файле filel:


extern int sp; extern double val[];


void push(double f) { … }


double pop(void) { … }


в файле file2: int sp = 0; double val[MAXVAL];


Поскольку объявления c extern в файле filel находятся впереди и вовне определений функций, они действительны во всех функциях; одного набора объявлений достаточно для всего файла. То же самое необходимо было бы записать, если бы определения переменных sp и val стояли после обращения к ним в одном и том же файле.

Скачать в pdf «Язык программирования C»