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 = 2
Ispis 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.