У овом упутству ћете научити о опсегу и животном вијеку локалних и глобалних варијабли. Такође ћете научити о статичким и регистрационим променљивим.
Свака променљива у програмирању на Ц има два својства: тип и класу меморије.
Тип се односи на тип података променљиве. Класа складиштења одређује опсег, видљивост и животни век променљиве.
Постоје 4 врсте класе складишта:
- аутоматски
- спољни
- статички
- регистровати
Локална променљива
Променљиве декларисане унутар блока су аутоматске или локалне променљиве. Локалне променљиве постоје само унутар блока у којем су декларисане.
Узмимо пример.
#include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )
Када покренете горњи програм, добићете грешку непријављени идентификатор и. То је зато што сам декларисан унутар for
блока петље. Изван блока је непријављен.
Узмимо још један пример.
int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() )
У горњем примеру, н1 је локални за, main()
а н2 је локални за func()
.
То значи да не можете приступити променљивој н1 изнутра func()
јер она постоји само изнутра main()
. Слично томе, не можете приступити н2 променљивој изнутра main()
јер она постоји само изнутра func()
.
Глобална променљива
Променљиве које су декларисане изван свих функција познате су као спољне или глобалне променљиве. Доступни су из било које функције унутар програма.
Пример 1: Глобална променљива
#include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); )
Оутпут
н = 7
Претпоставимо да је глобална променљива декларисана у file1
. Ако покушате да користите ту променљиву у другој датотеци file2
, преводилац ће се жалити. Да би се решио овај проблем, кључна реч extern
се користи file2
за означавање да је спољна променљива декларисана у другој датотеци.
Региструј променљиву
Кључна register
реч се користи за декларисање променљивих регистра. Регистарске променљиве су требале бити брже од локалних променљивих.
Међутим, модерни компајлери су врло добри у оптимизацији кода, а ретка је шанса да ће употреба променљивих регистра убрзати ваш програм.
Ако не радите на уграђеним системима у којима знате како да оптимизујете код за дату апликацију, нема користи од променљивих регистра.
Статичка променљива
Статичка променљива се декларише помоћу static
кључне речи. На пример;
статички инт и;
Вредност статичке променљиве задржава се до краја програма.
Пример 2: Статичка променљива
#include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); )
Оутпут
6 11
Током првог позива функције, вредност ц се иницијализује на 1. Његова вредност се увећава за 5. Сада је вредност ц 6, која се штампа на екрану.
Током другог позива функције, ц се поново не иницијализује на 1. То је зато што је ц статичка променљива. Вредност ц се повећава за 5. Сада ће њена вредност бити 11, што је одштампано на екрану.