Extern - внешние переменные

Глобальные переменные

КЛАССЫ ПАМЯТИ И ОБЛАСТЬ ДЕЙСТВИЯ

Перегрузка функций

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

#include <stdio.h>

#include <string.h>

int Name (int first) {

return first*first;

}

int Name (unsigned first) {

return first*first;

}

char Name (char first) {

return first*first;

}

int Name (int first,char *second) {

return first*strlen(second);

}

float Name (float r) {

return r*r;

}

double Name (double r) {

return r*r;

}

void main(void) {

printf("%d\n", noName(4));

printf("%d\n", noName((unsigned)4));

printf("%c\n", noName('c'));

printf("%d\n", noName(4,"cлово"));

printf("%0.2f\n", noName((float)1.2));

printf("%0.2lf\n", noName((double)1.2));

}

До сих пор мы имели дело с локальными переменными, которые доступны только в одной функции. В данном случае переменные a, b в main() и myfunc() являются разными переменными.

void myfunc(int, int);

void main (void){

int a=5, b=10;

printf ("%d %d\n", a, b);

myfun (a, b);

printf ("%d %d\n", a, b);

}

void myfun (int a, int b){

a++; b++;

printf ("%d %d\n", a, b);

}

Каждая существует только в своей функции и доступна только в ней. Физически это разные ячейки памяти. Такие переменные называются "локальными". Но иногда требуются переменные доступные из любой функции и даже модуля программы. Такие переменные называются "глобальными".

Каждая переменная в Си принадлежит некоторому классу памяти. Всего существует 5 классов памяти. Для их описания используются ключевые слова:

extern - внешний,

auto - автоматический,

static - статический

register - регистровые.

Хранятся в области данных программы. Определяются до main() и доступны в любой функции программы. Время жизни - программа. При определении инициализируются по умолчанию 0 на стадии компиляции. Область видимости вся программа.

int count;

void main (void){

count ++;

.........

}

fun (){

printf ("%d\n", count);

}

Переменная count является внешней и доступна в обеих функциях.

Если в программе есть одноименная локальная переменная, она закрывает глобальную переменную. Для расширения видимости операция расширения доступа::

int count;

void main (void){

int count; //автоматическая переменная

::count++;

..........

printf(“%d”,::count);

}

void fun (void){

count ++;

printf ("%d\n",count);

}

Если переменная определяется в одном модуле, но к ней есть обращение в другом, то нужно обязательно это указать, объявив ее как внешнюю, иначе будет создана новая переменная с этим именем.

I модуль. II модуль.

int cost; void func (void){

void main (void){ extern int cost;

............................

} }


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: