/* Demonstrira zivotni vek i oblasti vazenja promenjivih (scope) */
#include <stdio.h>

/* Globalna promenjiva */
int a = 0; 

/* Uvecava se globalna promenjiva a */ 
void increase() {
  a++;
  printf("increase::a = %d\n", a);
}

/* Umanjuje se lokalna promenjiva a. Globalna promenjiva zadrzava svoju vrednost. */
void decrease() {
  /* Ovo a je nezavisna promenjiva u odnosu na globalno a */
  int a = 0;
  a--;
  printf("decrease::a = %d\n", a);

}

void nonstatic_var() {
  /* Nestaticke promenjive ne cuvaju vrednosti kroz pozive funkcije */
  int s=0;
  s++;
  printf("nonstatic::s=%d\n",s);
}

void static_var() {
  /* Staticke promenjive cuvaju vrednosti kroz pozive funkcije. 
	 Inicijalizacija se odvija samo u okviru prvog poziva. */
  static int s=0;
  s++;
  printf("static::s=%d\n",s);
}

main() {
  /* Promenjive lokalne za funkciju main */
  int i;
  int x = 3;
  
  printf("main::x = %d\n", x);
  
  
  for (i = 0; i<3; i++) {
	/* Promenjiva u okviru bloka je nezavisna od spoljne promenjive.
	   Ovde se koristi promenjiva x lokalna za blok petlje koja ima 
	   vrednost 5, dok originalno x i dalje ima vrednost 3*/
	int x = 5;
	printf("for::x = %d\n", x);
  }
  
  /* U ovom bloku x ima vrednost 3 */
  printf("main::x = %d\n", x);
  
  increase();
  decrease();
  
  /* Globalna promenjiva a */
  printf("main::a = %d\n", a);
  
  /* Demonstracija nestatickih promenjivih */
  for (i = 0; i<3; i++)
	nonstatic_var();
  
  /* Demonstracija statickih promenjivih */
  for (i = 0; i<3; i++)
	static_var();
}