Globalne varijable
Ovim varijablama može pristupiti svaka funkcija
iz programa. Implementiraju se asociranjem memorije imenima varijabli.
Ne kreiraju se ponovno ako se funkcija ponovno poziva.
DEFINIRANJE GLOBALNIH VARIJABLI
/* Demonstriranje globalnih varijabli */ #include <stdio.h> int add_numbers( void ); /* ANSI prototip funkcije */ /* Ovo su globalne varijable i može im pristupiti svaka funkcija */ int value1, value2, value3; int add_numbers( void ) { auto int result; result = value1 + value2 + value3; return result; } main() { auto int result; value1 = 10; value2 = 20; value3 = 30; result = add_numbers(); printf("Suma %d + %d + %d iznosi %d\n", value1, value2, value3, final_result); } Ispis programa
Suma10 + 20 + 30 iznosi 60Vidljivost globalnih varijabli se može ograničiti pažljivim odabirom mjesta deklaracije. Globalne varijable su vidljive od deklaracije do kraja koda.
#include <stdio.h> void no_access( void ); /* ANSI prototip funkcije */ void all_access( void ); static int n2; /* n2 se vidi od ove točke nadalje */ void no_access( void ) { n1 = 10; /* nedozvoljeno, n1 još nije poznat */ n2 = 5; /* dozvoljeno */ }
static int n1; /* n1 se vidi od ove točke nadalje */ void all_access( void ) { n1 = 10; /* dozvoljeno */ n2 = 3; /* dozvoljeno */ }
AUTOMATSKE I STATIČKE VARIJABLE
C programi imaju više područja (dijelova) gdje
su smješteni podaci. Ti segmenti su tipično,
_DATA Statički podaci _BSS Neinicijalizirani statički podaci, postavljeni na nulu prije poziva main() _STACK Automatski podaci, smješteni na programskom stogu, lokalne varijable _CONST konstantni podaci, korištenjem ANSI C ključne riječi constKorištenje prikladne ključne riječi omogućava pravilno smještanje varijable u željeni segment podataka.
/* primjer programa koji pokazuje razliku između statičkih i automatskih varijabli */ #include <stdio.h> void demo( void ); /* ANSI prototip funkcije */ void demo( void ) { auto int avar = 0; static int svar = 0; printf("auto = %d, static = %d\n", avar, svar); ++avar; ++svar; } main() { int i; while( i < 3 ) { demo(); i++; } } Ispis programa auto = 0, static = 0 auto = 0, static = 1 auto = 0, static = 2Ispis programa
Statičke varijable se stvaraju i inicijaliziraju jednom, pri prvom pozivu funkcije. Slijedeći pozivi funkcije ne stvaraju ih i ne inicijaliziraju ih ponovno. Kada funkcija završava, varijable još uvijek postoje u _DATA segmentu, ali im ne mogu pristupiti vanjske funkcije.
Automatske varijable su suprotne. Stvaraju se
i inicijaliziraju ponovno svaki put kada se funkcija pozove. Nestaju (dealociraju
se) kada funkcija završava. Kreiraju se u _STACK segmentu.