Programiranje u C-u

  

LOKALNE I GLOBALNE VARIJABLE

Lokalne varijable
Ove varijable postoje samo unutar određene funkcije koja ih kreira. Nepoznate su drugim funkcijama i glavnom programu. Kao takve, uobičajeno se implementiraju koristeći stog (stack). Lokalne varijable prestaju postojati kada se izvrši funkcija koja ih je kreirala. Ponovno se kreiraju svaki put kada se funkcija poziva ili izvršava.

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 60
Vidljivost 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 const
Koriš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.


©Copyright B Brown. 1984-1998. All rights reserved.