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 18:22 | Komunita

    O víkendu probíhá v Bruselu konference FOSDEM 2026 (Free and Open source Software Developers’ European Meeting). Program konference je velice nabitý: 37 místností, 71 tracků, 1184 přednášejících, 1069 přednášek, prezentací a workshopů. Sledovat je lze i online. K dispozici budou jejich videozáznamy. Aktuální dění lze sledovat na sociálních sítích.

    Ladislav Hagara | Komentářů: 3
    včera 18:00 | IT novinky

    Společnost Nex Computer stojící za "notebooky bez procesorů a pamětí" NexDock představila telefon NexPhone, který může funguje jako desktop PC, stačí k němu připojit monitor, klávesnici a myš nebo NexDock. Telefon by měl být k dispozici ve třetím čtvrtletí letošního roku. Jeho cena by měla být 549 dolarů. Předobjednat jej lze s vratní zálohou 199 dolarů. V dual-bootu by měl být předinstalovaný Android s Linuxem (Debian) jako aplikací a Windows 11.

    Ladislav Hagara | Komentářů: 3
    včera 16:00 | Nová verze

    Byla vydána nová major verze 9.0 softwaru pro správu elektronických knih Calibre (Wikipedie). Přehled novinek v poznámkách k vydání. Vypíchnuta je podpora AI.

    Ladislav Hagara | Komentářů: 1
    včera 14:22 | Nová verze

    Wasmer byl vydán ve verzi 7.0. Jedná se o běhové prostředí pro programy ve WebAssembly. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    včera 12:22 | Zajímavý software

    V reakci na nepopulární plán Microsoftu ještě více ve Windows prohloubit integraci umělé inteligence Copilot, Opera na sociální síti 𝕏 oznámila, že připravuje nativní linuxovou verzi prohlížeče Opera GX. Jedná se o internetový prohlížeč zaměřený pro hráče, přičemž obsahuje všechny základní funkce běžného prohlížeče Opera. Kromě integrace sociálních sítí prohlížeč například disponuje 'omezovačem', který umožňuje uživatelům omezit využití sítě, procesoru a paměti prohlížečem, aby se tak šetřily systémové zdroje pro jinou aktivitu.

    NUKE GAZA! 🎆 | Komentářů: 8
    včera 06:22 | Zajímavý software

    NVIDIA vydala nativního klienta své cloudové herní služby GeForce NOW pro Linux. Zatím v beta verzi.

    Ladislav Hagara | Komentářů: 6
    včera 04:33 | Zajímavý projekt

    Open Gaming Collective (OGC) si klade za cíl sdružit všechny klíčové projekty v oblasti linuxového hraní počítačových her. Zakládajícími členy jsou Universal Blue a Bazzite, ASUS Linux, ShadowBlip, PikaOS a Fyra Labs. Strategickými partnery a klíčovými přispěvateli ChimeraOS, Nobara, Playtron a další. Cílem je centralizovat úsilí, takže namísto toho, aby každá distribuce udržovala samostatné opravy systému a podporu hardwaru na

    … více »
    NUKE GAZA! 🎆 | Komentářů: 0
    včera 04:11 | Bezpečnostní upozornění

    V kryptografické knihovně OpenSSL bylo nalezeno 12 zranitelností. Opraveny jsou v upstream verzích OpenSSL 3.6.1, 3.5.5, 3.4.4, 3.3.6 a 3.0.19. Zranitelnosti objevila společnost AISLE pomocí svého autonomního analyzátoru.

    Ladislav Hagara | Komentářů: 1
    29.1. 20:11 | Zajímavý software

    Desktopové prostředí Xfce bude mít vlastní kompozitor pro Wayland s názvem xfwl4. V programovacím jazyce Rust s využitím stavebních bloků z projektu Smithay jej napíše Brian Tarricone. Úprava stávajícího xfwm4 tak, aby paralelně podporoval X11 i Wayland, se ukázala jako špatná cesta.

    Ladislav Hagara | Komentářů: 6
    29.1. 19:11 | Komunita

    Desktopové prostředí KDE Plasma 6.8 poběží už pouze nad Waylandem. Vývojáři, kteří s rozhodnutím nesouhlasí, vytvořili fork KDE Plasma s názvem SonicDE (Sonic Desktop Environment) s cílem zachovat a vylepšovat podporu X11.

    Ladislav Hagara | Komentářů: 8
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (6%)
     (0%)
     (10%)
     (24%)
     (3%)
     (5%)
     (2%)
     (11%)
     (32%)
    Celkem 693 hlasů
     Komentářů: 22, poslední 29.1. 23:06
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: argument list

    23.7.2011 19:55 Petr
    argument list
    Přečteno: 334×
    #include curses.h

    void eas_debug(int debug_level, char *str1, ...) { va_list args; va_start(args, str1); printf(str1, args); }

    int main() { eas_debug(1, "Hello, world! %d\n", 2); }

    Tento program mi na konzoli vypíše: "Hello, world! -1076085368". namísto "Hello, world! 2". Co dělám špatně ? Díky za postřehy, Petr

    Řešení dotazu:


    Odpovědi

    23.7.2011 21:35 mato
    Rozbalit Rozbalit vše Re: argument list
    Hm, toto ma celkom zaujalo. Nikdy som s varargs nerobil, i ked mi je to zname. Podla man page to ale skor vyzera, ze ty tak argumenty nemozes dat. Ak som to spravne pochopil, tak k ... pristupujes cez va_* macra. Tj:
    
    #include <stdio.h>
    #include <stdarg.h>
    
    void eas_debug(int debug_level, char *str1, ...) {
            va_list args;
            va_start(args, str1);
    
            while (*str1) {
                    switch (*str1++) {
                    case 'd' : {
                                    int a = va_arg(args, int);
                                    printf ("eas_debug%d: got int: %d\n", debug_level, a);
                                    break;
                            }
                    }
            }
    
            va_end(args);
    }
    
    int main() {
            eas_debug(1, "%d", 2);
            return 0;
    }
    
    
    a vystup:
    
    $ cc -Wall -o atest test.c
    $
    
    $ ./atest
    eas_debug1: got int: 2
    $
    
    
    
    24.7.2011 00:15 Petr
    Rozbalit Rozbalit vše Re: argument list
    jj to bych celkem chápal, ale já potřebuju funkci které můžu předhodit v tom variable listu různé typy argumentů, prostě aby se to chovalo stejně jako standartní printf.

    Např. eas_debug(1, "24test: %d%s", 2, "4") a potom třeba eas_debug(1, "24test: %s%d", "2", 4). Tim přístupem přes va_arg() z toho bude pěkná brutalita, jestli to vůbec jde?
    24.7.2011 00:36 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: argument list

    S obyčejným printf() tohle (předání všech parametrů najednou) neuděláte, ale právě proto existuje vprintf() a příbuzné funkce:

    void debug(unsigned l, const char* fmt, ...)
    {
      va_list v;
      if (l > debug_level) return;
      va_start(v, fmt);
      vfprintf(stderr, fmt, v);
      va_end(v);
    }
    

    Jinak samozřejmě můžete udělat i to, co navrhoval mato, a napsat si svou vlastní funkci, která bude parsovat format string a zpracovávat podle něj jednotlivé parametry. Pokud ale potřebujete jen nadstavbu nad standardní printf(), zbytečně byste tím jen duplikoval už hotovou práci.

    24.7.2011 00:46 mato
    Rozbalit Rozbalit vše Re: argument list
    pekne, na *printf family som nepomyslel .. takto to funguje ukazkovo.
    24.7.2011 11:16 Petr
    Rozbalit Rozbalit vše Re: argument list
    To je přesně ono, díky ..
    24.7.2011 00:40 mato
    Rozbalit Rozbalit vše Re: argument list
    kedysi davnejsie som sa dival na zdrojove kody printf, namatkovo som teraz grepol zdrojaky z FreeBSD, v sys/boot/arm/at91/libat91/printf.c je (pastujem iba pre tvoju otazku dolezite veci):
    void printf(const char *fmt,...) {
            va_list ap;
            va_start(ap, fmt);
            while ((c = *fmt++)) {
                            c = *fmt++;
                            switch (c) {
                            case 'c':
                                    xputchar(va_arg(ap, int));
                                    continue;
                            case 's':
                                    for (s = va_arg(ap, char *); *s; s++)
                                            xputchar(*s);
                                    continue;
    
    
    odkial ten printf pochadza je uplne jedno. osobne by som povedal, ze sa to ale teda nada spravit tak, ako si to mal na mysli.

    mozno ma ale niekto opravi..
    12.9.2011 23:48 Nikola Pajkovský | skóre: 16
    Rozbalit Rozbalit vše Re: argument list
    #define debug(...)                                                      \
            do {                                                            \
                    fprintf(stderr, "%s:%s():%d:",                          \
                            __FILE__, __func__, __LINE__);                  \
                    fprintf(stderr, __VA_ARGS__);                           \
                    fprintf(stderr, "\n");                                  \
            } while(0)
    
    nebo pres funkci
    void log_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
    
    Save the whales. Feed the hungry. Free the mallocs
    13.9.2011 00:22 zulu
    Rozbalit Rozbalit vše Re: argument list
    Předchozí odpovědi a varování o stáří diskuze jsi přehlédl, nebo jen ignoroval?
    13.9.2011 11:25 Nikola Pajkovský | skóre: 16
    Rozbalit Rozbalit vše Re: argument list
    nevidel jsem reseni, tak jsem poslal
    Save the whales. Feed the hungry. Free the mallocs
    13.9.2011 15:08 Sten
    Rozbalit Rozbalit vše Re: argument list
    Problém je v tom, že printf předáváte ukazatel na ty argumenty místo samotných argumentů. Pro použití s va_list je vprintf ;-)

    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.