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í
×
    dnes 21:44 | IT novinky

    Akční adventura State of Mind je na portále GOG.com zdarma, akce trvá do 10. září.

    |🇵🇸 | Komentářů: 0
    dnes 13:22 | IT novinky

    Na Kickstarteru běží kampaň na podporu malého robotický psa Petoi Quaddle. Postaven je na ESP32-S3. V několika variantách. S řadou senzorů. Programovat lze pomocí Pythonu, C++ nebo i vizuálních bloků. Zkoušet a trénovat lze v simulátoru.

    Ladislav Hagara | Komentářů: 1
    včera 22:11 | Pozvánky

    Dětem začala škola a nedobrovolně se tak musí vzdělávat. Avšak pro dospělé, kteří se chtějí vzdělávat nebo naopak se o vědomosti podělit, je tu Virtuální Bastlírna - jako každý měsíc si můžete online a zdarma nezávazně popovídat o vědě a technice nejen s bastlíři, ale i s vývojáři, vědci nebo profesory. A čemu se strahováci budou věnovat? Blíží se KiCAD 11 s nespočtem novinek, z nichž zde musí zmínit alespoň možnost kótování a závislostí z

    … více »
    bkralik | Komentářů: 1
    včera 19:33 | Komunita

    Asahi Linux, tj. Linux pro Apple Silicon, oficiálně podporuje čipy M3 (M3, M3 Pro a M3 Max).

    Ladislav Hagara | Komentářů: 4
    včera 15:44 | IT novinky Ladislav Hagara | Komentářů: 1
    včera 15:00 | IT novinky

    Server SiFive BigSky SF-2U870 2U je založený na jádře SiFive P870-D, zatím je naintegrovaných 32 jader 256 GB RAM 2 GHz, škálovat lze do 256 jader na čip. O něco podrobnější popis serveru v článku SiFive BigSky Ships the First RISC-V Server. Is the GPU Head Node the Prize? na futurumgroup.com. Asi ani tento čip nebude na úrovni nejlepších 64-bit ARMů a AMD Zenů, ale splňuje RVA23 specifikaci a je podporovaný Ubuntu 26.04 LTS a RHEL 10. V článku je

    … více »
    Pavel Píša | Komentářů: 1
    včera 00:11 | IT novinky

    Na YouTube lze zhlédnout nový celovečerní dokumentární film The Story of VS Code | Official Documentary věnovaný Visual Studio Code.

    Ladislav Hagara | Komentářů: 19
    4.9. 23:49 | Zajímavý článek

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 26.08.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.

    Ladislav Hagara | Komentářů: 1
    4.9. 17:33 | Zajímavý článek

    Bylo vydáno nové číslo hackerského magazínu tmp.0ut: Volume 5.

    Ladislav Hagara | Komentářů: 1
    4.9. 01:44 | Nová verze

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

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (4%)
     (21%)
     (29%)
     (7%)
     (5%)
     (2%)
     (14%)
     (21%)
    Celkem 2608 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: C; pointer na fciu v strukture

    20.12.2010 16:50 mato
    C; pointer na fciu v strukture
    Přečteno: 749×
    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.