Új hozzászólás Aktív témák

  • buherton

    őstag

    válasz borisz1994 #6057 üzenetére

    Nem egészen. Vagyis hát nem olyan triviális. Főleg a változóknál.

    A deklaráció a fordítónak szól, vagyis ez ahhoz kell, hogy a fordító értelmezni tudja a leírtakat, de nincs közvetlen hatása a processzoron futó kódra. Azaz meg lehet írni a programot ezek nélkül, csak olvashatatlan lesz. A definíció a processzornak szól és enélkül nem futna úgy a programunk, ahogy szeretnék.

    Kezdjük az egyszerűbbel a függvénnyel.

    Ezek deklarációk:
    extern void foo(void);
    static int foo(int);
    void foo(void);
    bar(); // ez most nem függvényhívás, és ez most nagyon gonosz dolog tőlem  
    A fordítónak ezekkel jelzed, hogy ha talál egy ilyen szignatúrájú függvényhívást, amihez még nem találta meg a definíciót, akkor ne hasaljon el és a keywordnek megfelelően járjon el.

    Ezek definíciók:
    void foo(void)
    {}
    static int foo(int)
    {
    return 0;
    }
    bar()
    {
    return 0;
    }
    Leírod, hogy mit csinál a függvény. Ezzel mondod meg, hogy mit csináljon a programod.

    Változók.

    Ez deklaráció (nem is tudok többet ennél):
    extern int;
    Ugyanaz, mint a függvénynél.

    Ezek definíciók:
    int foo;
    static char foo;
    Ugyanaz, mint a függvénynél.

    Egyébként igen, a deklaráció nem jár memóriafoglalással, a definíció jár. Viszont a deklaráció csak a láthatóságot növeli, semmi más plusz dolgot nem tud, nem befolyásolja a típust, élettartamot és a tárolási osztályt sem.

    Az int mérete architektúra függő és a limits.h-ban van meg a "mérete". Tipikusan 4 bájt. Ha jól emlékszem, akkor az AVR8 esetén 2 bájt méretűek.

Új hozzászólás Aktív témák