abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 17:33 | Nová verze

    Byla vydána nová stabilní verze 7.6 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 140. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Nová verze

    Byla vydána verze 1.90.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    včera 16:11 | Nová verze

    GNUnet (Wikipedie) byl vydán v nové major verzi 0.25.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.

    Ladislav Hagara | Komentářů: 0
    včera 12:11 | Nová verze

    Byla vydána nová major verze 7.0 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Nově je postavena je na Debianu 13 (Trixie) a GNOME 48 (Bengaluru). Další novinky v příslušném seznamu.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | IT novinky

    Společnost Meta na dvoudenní konferenci Meta Connect 2025 představuje své novinky. První den byly představeny nové AI brýle: Ray-Ban Meta (Gen 2), sportovní Oakley Meta Vanguard a především Meta Ray-Ban Display s integrovaným displejem a EMG náramkem pro ovládání.

    Ladislav Hagara | Komentářů: 0
    včera 01:11 | Nová verze

    Po půl roce vývoje od vydání verze 48 bylo vydáno GNOME 49 s kódovým názvem Brescia (Mastodon). S přehrávačem videí Showtime místo Totemu a prohlížečem dokumentů Papers místo Evince. Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.

    Ladislav Hagara | Komentářů: 11
    17.9. 16:22 | Nová verze

    Open source softwarový stack ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán ve verzi 7.0.0. Přidána byla podpora AMD Instinct MI355X a MI350X.

    Ladislav Hagara | Komentářů: 0
    17.9. 15:22 | Nová verze

    Byla vydána nová verze 258 správce systému a služeb systemd (GitHub).

    Ladislav Hagara | Komentářů: 6
    17.9. 15:11 | Nová verze

    Byla vydána Java 25 / JDK 25. Nových vlastností (JEP - JDK Enhancement Proposal) je 18. Jedná se o LTS verzi.

    Ladislav Hagara | Komentářů: 0
    17.9. 14:44 | Humor

    Věra Pohlová před 26 lety: „Tyhle aféry každého jenom otravují. Já bych všechny ty internety a počítače zakázala“. Jde o odpověď na anketní otázku deníku Metro vydaného 17. září 1999 na téma zneužití údajů o sporožirových účtech klientů České spořitelny.

    Ladislav Hagara | Komentářů: 9
    Jaké řešení používáte k vývoji / práci?
     (39%)
     (55%)
     (6%)
     (9%)
     (12%)
     (9%)
     (12%)
     (9%)
     (15%)
    Celkem 33 hlasů
     Komentářů: 5, poslední včera 22:30
    Rozcestník

    Dotaz: C; pointer na fciu v strukture

    20.12.2010 16:50 mato
    C; pointer na fciu v strukture
    Přečteno: 511×
    Cafte, pri rieseni problemu sm narazil na zaujimavy problem, pri ktorom som si nie celkom isty. Otazka znie: je spravne menit adresu fcie pocas jej behu (po zavolani)? Otazka asi nie je polozena uplne spravne .. na ukazku kod:
    #include <stdio.h>
    
    /* fwd deklaracia */
    struct point __point;
    
    /* exec fcia */
    typedef int(*f_execute)(struct point* p);
    
    struct point {
            int x;
            int y;
            int z;
    
            f_execute       exec;
    };
    
    int exec_primary(struct point* p);
    int exec_secondary(struct point* p);
    
    int main()
    {
            struct point p;
    
            p.x = p.y = p.z = 0;
            p.exec = &exec_primary;
    
            /* execute */
            while (p.exec != NULL) {
                    p.exec(&p);
    
                    printf ("DEBUG: p: [%d,%d,%d]\n", p.x, p.y, p.z);
            }
    
            return 0;
    }
    
    int exec_primary(struct point* p)
    {
            p->x += 4;
            p->y += 2;
            p->z += 1;
    
            p->exec = &exec_secondary;
            return 0;
    }
    
    int exec_secondary(struct point* p)
    {
            p->x *= 2;
            p->y *= 4;
            p->z *= 3;
    
            p->exec = NULL;
            return 0;
    }
    
    
    Nech mam struktutu point, ktora v sebe ma okrem suradnic aj pointer na fciu, ktoru ma vykonat. Na zaciatku je exec nastaveny na prvu, zakladnu exec fciu exec_primary. Ta pocas svojho behu zmeni point exec pointer na druhu fciu, exec_secondary
    mozem mat zadefinovany neobmedzeny pocet exec fcii, ktory nie je vopred znamy, pripadne sa dynamicky meni od systemu

    vsetko funguje ako ma, no nie som si isty ci je toto spravne, resp. uplne koser riesenie.

    musim si pozriet hlbsie teoriu o tom, ako su fcie volane (tj. mngmnt ohladne volani fcii), ale mozno mi niektori z vas budete vediet poradit, resp. nasmerovat, ci je takyto sposob v poriadku

    vopred vdaka

    Odpovědi

    20.12.2010 17:59 R
    Rozbalit Rozbalit vše Re: C; pointer na fciu v strukture
    Nemenis "adresu funkcie", ale menis nejaky pointer ulozeny v strukture. Ze je v nom ulozena adresa samotnej funkcie, to je nezaujimave. Volanie funkcie uz bolo vykonane a do dalsieho volania ten pointer nebude potrebny.

    Pre pochopenie si predstav kod v assembleri - funkciu zavolas (CALL), potom bezi a nakoniec sa vrati (RET).
    20.12.2010 18:52 mato
    Rozbalit Rozbalit vše Re: C; pointer na fciu v strukture
    ano, pravda..zle som sa vyjadril v tej otazke ..

    dobre si to naznacil s tym CALL/RET .. RET bude adresa <main>; to ze je v strukture pointer na adresu, ktoru som zavolal a zaroven strukturu pozmenil je jedno (tj. je jedno ci menil integer alebo pointer (co je koniec koncov zas len cislo)

    .. uz sa dlhsi cas chystam pozriet si info ohladne volanie fcia a mngmnt stack-u .. zimne vecery su ten idealny cas

    diq

    21.12.2010 12:10 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: C; pointer na fciu v strukture
    No nevím jakou logiku se tím snažíte naprogramovat, ale nebylo by jednodušší prostě ty funkce zavolat rovnou za sebou?
    In Ada the typical infinite loop would normally be terminated by detonation.
    21.12.2010 12:46 mato
    Rozbalit Rozbalit vše Re: C; pointer na fciu v strukture
    ten horeuvedeny priklad sluzi len ako ukazka principu, co pouzivam vo svojom kode ja ..

    problem spociva v tom, ze pocet funkcii nie je vopred znamy a je definovany uzivatelom .. moze ich byt lubovolne vela, kde posledna fcia musi byt NULL.
    jedna sa (resp. bude sa jednat) o kniznicu simulacneho jadra, kde entita zijuca v systeme prechadza lubovolnym poctom eventov; zo systemu odchadza, ked je jej exec nastaveny na NULL

    pavlix avatar 21.12.2010 19:30 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: C; pointer na fciu v strukture
    Pak nevidím problém během volání funkce ukazatel nastavit na novou funkci. S CALL a RET to nemá nic společného. Jediná souvislost mezi strukturou a funkcí je v tomhle případě, že se struktura na funkci odkazuje.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    21.12.2010 19:51 __dark__
    Rozbalit Rozbalit vše Re: C; pointer na fciu v strukture
    Tvuj pristup je v poradku. Adresa funkce se nacte pokazde, kdyz se ma funkce zavolat. Jak uz bylo zmineno, ty nemenis adresu te funkce, ale jen ukazatel. Akorat si ted nejsem jisty tim struct point __point;, nemelo by tam byt jen struct point;?
    22.12.2010 10:10 mato
    Rozbalit Rozbalit vše Re: C; pointer na fciu v strukture
    s tou fwd declaraciou mas pravdu, uplne by postacilo
    
    struct point;
    
    __point je uz zadef. premenna, co trosku mozno nema zmysel .. ja to (zne)uzivam na to, aby som videl, ze je to to fwd declaracia - bije mi to do oci hned ked otvorim zdrojak ..

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.