Hirdetés

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

  • kovisoft
    őstag

    Helló, egy tweetben láttam egy ilyet:

    A kód picit csinosítva ez:

    #include <stdio.h>

    int fun(par)
    int (*par)();
    {
    return (*par)();
    }

    int sub()
    {
    return 12;
    }

    int main()
    {
    int sub();
    int var = fun(sub);
    printf("%d", var);
    }

    Dolgok, amiket nem igazán értek:
    1/ int sub();
    Ez gondolom függvénypointer definiálás akar lenni, de akkor nem kellene csillagozni?
    2/ Az elején nem értem azt a konstrukciót:
    int fun(par)
    int (*par)();

    Ez mi az isten? Tehát ha le van zárva pontosvesszővel, akkor utána miből returnölünk?

    1/ int sub();
    Ez egy forward declaration, arra szolgál, hogy ha majd csak később lesz ténylegesen definiálva a függvény, amit már előtte használni akarsz, akkor ebből tudja a fordító, hogy milyen argumentumai vannak és milyen típusú értéket ad vissza. Mivel te áthelyezted a sub() függvényt a main() elé, így a te változatodban nincs rá szükség.

    2/ Egy függvény argumentumait deklarálhatod úgy is, hogy rögtön odaírod a nevük elé a típusukat, de úgy is, hogy csak a nevüket írod a zárójelbe, a típusukat ekkor külön meg kell adni a zárójel után és a nyitó kapcsos zárójel előtt. Jelen esetben a fun() függvénynek egy par nevű argumentuma van, aminek a típusa egy int-et visszaadó argumentum nélküli függvénypointer. Ennek lesz majd átadva a sub() itt: fun(sub)

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