abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    dnes 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

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

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 9
    včera 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

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

    Oznámeny byly nové Raspberry Pi Compute Module 4S. Vedle původní 1 GB varianty jsou nově k dispozici také varianty s 2 GB, 4 GB a 8 GB paměti. Compute Modules 4S mají na rozdíl od Compute Module 4 tvar a velikost Compute Module 3+ a předchozích. Lze tak provést snadný upgrade.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Nová verze

    Po roce vývoje od vydání verze 1.24.0 byla vydána nová stabilní verze 1.26.0 webového serveru a reverzní proxy nginx (Wikipedie). Nová verze přináší řadu novinek. Podrobný přehled v souboru CHANGES-1.26.

    Ladislav Hagara | Komentářů: 0
    včera 04:33 | Nová verze

    Byla vydána nová verze 6.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.14.

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

    Byla vydána nová verze 30.0.0 frameworku pro vývoj multiplatformních desktopových aplikací pomocí JavaScriptu, HTML a CSS Electron (Wikipedie, GitHub). Chromium bylo aktualizováno na verzi 124.0.6367.49, V8 na verzi 12.4 a Node.js na verzi 20.11.1. Electron byl původně vyvíjen pro editor Atom pod názvem Atom Shell. Dnes je na Electronu postavena celá řada dalších aplikací.

    Ladislav Hagara | Komentářů: 2
    včera 04:11 | Nová verze

    Byla vydána nová verze 9.0.0 otevřeného emulátoru procesorů a virtualizačního nástroje QEMU (Wikipedie). Přispělo 220 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (72%)
     (9%)
     (2%)
     (17%)
    Celkem 743 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Dotaz: jazyk C: prepis funkce na makro

    29.4.2008 11:36 Michal Dudek
    jazyk C: prepis funkce na makro
    Přečteno: 821×
    Dobry den, zajimalo by me, jak by sla tato funkce prepsat na makro (#define...):
    int mystrlen(char *string)
    {
      int i = 0;
    
      while (string[i] != '\0')
        i++;
    
      return i;
    }
    

    Odpovědi

    29.4.2008 12:31 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    1. Co jste zkusil, že vám to nefunguje? Neměl by v tom být problém, aspoň pro gcc ne. #define ...() ({... i;})

    2. K čemu to potřebujete? Pokud jde o rychlost, tak jednak to už makro nejspíš je (a dost pravděpodobně to bude rychlejší než cokoliv co napíšete), a dvak použít inline je téměř vždy čistší.
    29.4.2008 13:07 jas
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    #define mystrlen(str,a) while(str[a]!='\0') a++;

    Pouzitie:
    #define mystrlen(str,a) while(str[a]!='\0') a++; int main(){ char str[10]; scanf("%s", str); int i = 0; mystrlen(str,i); printf("%d\n", i); return 0; }
    29.4.2008 13:10 jas
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Sorry, za to pouzitie, zabudol som na tagy.
    Takze este raz:
    #include <stdio.h>
    #define mystrlen(str,a) while(str[a]!='\0') a++;
    
    
    int main(){
            char str[10];
            scanf("%s", str);
            int i = 0;
            mystrlen(str,i);
            printf("%d\n", i);
            return 0;
    }
    
    29.4.2008 13:22 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Odporuca sa v makre kazde pouzitie premennej zatvorkovat. Makro funguje na syntaktickej urovni a ak sa do neho nacpe nejaky zlomyselny vyraz, vznikne z toho galimatias.
    29.4.2008 13:31 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    On nemusí být ani moc zlomyslný, často stačí pouhé 'i+1'.
    29.4.2008 13:36 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Souhlas. A to i se dá dát dovnitř makra přes {int i = 0; ...} (aspoň gcc to umí, a je to vhodné obalit ještě kulatými), ale pak se dostáváme k omezením Cčkových maker, protože nevím o způsobu jak udělat unikátní identifikátor ála (gensym), takže pokud je paramatrem např. argv[i], tak se ta i z různých scopů zastíní.

    Lze použít _i, ale v jen o trošku složitějším případě i tak to makro nebude moc být voláno na sebe sama... zbytečné komplikace. I v Lispu, kde jsou makra na o hodně lepší úrovni, platí zásada používat je jen tam kde funkce nestačí. To tohle není.
    29.4.2008 22:06 jas
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Ono, vzhladom na to, ze to makro bude mat pravdepodobne len tuto jedinu funkciu, do ktorej bude vstupovat i = 0, tak to az tak osetrovat netreba, navyse to bol len taky priklad. 0 "problemoch" makier samozrejme cosi viem.
    Ono celkovo by som osobne najskor pouzil pred funkciou privlastok inline, cim by som ziskal vyhody makier a neprisiel o vyhody funkcii.
    29.4.2008 13:39 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    chýba vám tam druhý parameter, max možná dĺžka reťazca (i.e. max hodnota pre i)
    29.4.2008 14:01 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    BTW, ten nový trend dávat stejnou otázku na roota i sem mi začíná lézt krkem.
    30.4.2008 06:35 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Ako mala táto odpoveď pomôcť opytujúcemu sa vyriešiť jeho problém?
    30.4.2008 10:49 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Mohla by mu pomoci neobtěžovat ostatní tím, že musejí udržovat dvě (a více, máme ještě diskusní list, LinuxExpress atd.) paralelní diskuse nad stejnou otázkou.
    30.4.2008 11:10 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Velice jednoduše. Mně už to také trochu leze krkem, takže pokud je více takových, kteří následně tyto dotazy začnou ignorovat, tak to prostě informuje tazatele že někdy neodpověď může být způsobena zahlcením. Je samozřejmě na něm, co považuje za lepší cestu k získání odpovědi.
    30.4.2008 12:12 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Hehe, je to smiesne. Ze mame N najrozlicnejsich distribucii Linuxu, M balickovacich sytemov, ..., je v poriadku , to je sloboda. Ze mame viacero linuxovych portalov, to zrazu nie je v poriadku? Ak vas obtazuje sledovat ten isty obsah na viacerych portaloch, tak si jednoducho vyberte jeden, ktory je pre vas najvhodnejsi a ostatne ignorujte. Su to portaly s podobnou tematikou, takze temy sa budu nevyhnutne opakovat. Tak v zpravickach ako aj v diskusnych forach. To nie je chyba, to je crta.

    Pouzivatel chcel najst riesenie svojho problemu. (Nebudem teraz riesit, nakolko si ho mohol najst samostudiom ci nakolko je off-topic.) Pouzil preto viacero kanalov, kde predpokladal, ze moze riesenie ziskat. Svoju otazku polozil rozlicnym mnozinam ludi, lebo prirodzene ocakaval, ze cim vacsi pocet ludi oslovi, tym skor dostane odpoved. Ze tieto rozlicne mnoziny ludi maju neprazdny prienik? Inu, je to tak. Ale je to slobodne rozhodnutie prvkov tohto prienku.

    Takze: ze rovnake problemy citate v dvoch diskusnych forach, je vasa vec a vas problem. Ak proti tomu chcete nieco urobit, urobte tak konstruktivne (je viacero sposobov, ziadny nie je trivialny), a nie staznostami, ze "toto ste uz citali niekde inde".
    30.4.2008 13:29 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Ovšem diskuzní fórum není neplacená technická podpora. Takže pokud někdo na diskuzní fórum dotaz pokládá, měl by to činit s vědomím, že chce také nějak přispět – třeba tím, že bude ochoten odpovídat na doplňující dotazy, popíše výsledné řešení. Ovšem pokud takový dotaz položí sobecky na co nejvíce místech, aby se jen co nejrychleji dozvěděl řešení, nemá to s takovouto vstřícností nic společného – zbytečně budou lidé odpovídat na více místech, nebude na jednom místě kompletní řešení nebo prodiskutované všechny návrhy, ale bude kus tu a kus tamhle.

    Takže nejde o to, že by někomu vadilo, že stejný dotaz čte vícekrát. Jde o to, že tím tazatel dává přímo ukázkově najevo, že na diskuzní fórum a lidi okolo něj zvysoka kašle, že jenom potřebuje, aby někdo co nejrychleji a zadarmo vyřešil jeho problém.
    2.5.2008 19:39 mato
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    tvoje vysvetlenie nie je scestne, no treba brat do uvahy aj pripad, kedy by clovek pytajuci sa na otazku v roznych forach po zisteni spavneho riesenia napisal na vsetky fora, na ktorych sa pytal .. tym padom vlastne nezneuziva fora .. daju sa najst (aj tu na abclinuxu) prispevky, kde sa clovek pyta a sam si aj odpoveda .. ci uz nasiel tu odpoved sam, alebo mu pomohli na inych forach, to uz nezalezi .. ide o to, aby sme si pomahali..

    plateny support tu nie je, a prave preto mas pravo ten thread necitat .. pri platenom supporte si to dovolit nemozes ;)

    2.5.2008 20:23 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    tvoje vysvetlenie nie je scestne, no treba brat do uvahy aj pripad, kedy by clovek pytajuci sa na otazku v roznych forach po zisteni spavneho riesenia napisal na vsetky fora, na ktorych sa pytal .. tym padom vlastne nezneuziva fora .. daju sa najst (aj tu na abclinuxu) prispevky, kde sa clovek pyta a sam si aj odpoveda .. ci uz nasiel tu odpoved sam, alebo mu pomohli na inych forach, to uz nezalezi .. ide o to, aby sme si pomahali..
    To ale stále ještě neřeší ten problém, že se tím jeho dotazem budou lidi pravděpodobně zabývat i přesto, že nějká část už je někde vyřešená. Pochybuju o tom, že by dotyčný tazatel promptně každou odpověď z jednoho fóra kopíroval na druhé.
    2.5.2008 20:36 mato
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    to mas pravdu, a preto som aj napisal, ze s tebou vlastne suhlasim .. ja osobne som uz aj tu na abclinuxu posielal prispevky, na ktore som si sam odpovedal (lebo som na ne prisiel).. tak isto som aj pastoval odpovede na vsetky fora, kde som sa pytal (i ked ja sa moc casto nepytam .. nie ze by som vsetko vedel ;) - len nevyuzivam casto fora na pytanie sa .. )
    ono je to ale tazko riesit vseobecne - je to vzdy pripad od pripadu .. ak niekto pravidelne spamuje vsetky fora, tak uz asi nie je cosi v poriadku
    30.4.2008 22:51 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Jedna věc je "vybrat si svobodně fórum kde položím dotaz" a druhá věc je "položit stejný dotaz všude možně", případně na dvě podobná místa. Vzhledem k tomu, že já jsem jedním z těch, kterých se tazatel ptá, tak když se mne zeptá třikrát na totéž je to pro mne stejné, jako kdybych měl platit třikrát stejné daně :) (I dvakrát je moc). Když přijde výběrčí daní jednou, je to v pořádku. Když přijde podruhé, je to na pováženou. Když se mne zeptá potřetí během dvou dnů je to nepřijatelné. Ovšem opět opakuji -- přijít může, ale nebudu platit a pošlu na něj psy (cestou bude jistě křičet něco o svobodě podnikání a že přece může chodit kolikrát chce).

    No pan Jirsák to vysvětlil lépe. Pokládat stejný dotaz do více podobných fór je proti netiketě a je to vlastně jistá forma nespolupráce s těmi, koho se tazatel ptá, protože někdy je pro vyřešení problému spolupracovat, a mezi portály se o poznání hůř linkuje a odkazuje.
    30.4.2008 12:07 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Viz obě reakce výše. Kromě toho jsem už předtím k tématu odpověděl jak se dalo - problém tazatele není z otázky zřejmý (palčivě hryzající zvědavost? jiný důvod pro to dělat co ho zajímá nevidím).

    Když už jsme u toho, jak měla pomoci tazateli *vaše* reakce? (pokud se zeptáte znovu na to samé vy: tenhle komentář tazateli už nijak)
    30.4.2008 12:19 cronin | skóre: 49
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Když už jsme u toho, jak měla pomoci tazateli *vaše* reakce?
    Je zrejme, ze s tymto problemom patrne nijako. Dolezite je, ze cele toto vlakno bolo zalozene niekym, koho sice obtazuje citat tu istu otazku v dvoch forach, ale uz ho neobtazuje pisat prispevok, v ktorom fnuka nad tymto svojim osobnym problemom, ktory si sposobil len on sam. Takze ano, moje prispevky v tomto vlakne su rovnako neuzitocne ako tie Tvoje. Rozdiel je ten, ze ten Tvoj prispevok bol pricinou, tie moje a vsetkych dalsich su dosledkom.
    30.4.2008 12:26 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Takže když někdo upozorní tazatele na neslušnost jeho počínání, je to podle vás "fňukání"? Bylo by snad podle vás vhodnější takový duplicitní dotaz ignorovat, aby tazatel nejen nedostal odpověď, ale ani se nedozvěděl proč?
    30.4.2008 12:44 Tom.š Ze.le.in | skóre: 21 | blog: tz
    Rozbalit Rozbalit vše ot: multiposting
    Zdá se, že těch lidí kterým to vadí je trochu více, a duplicitní není jen tenhle jeden dotaz. Z toho pohledu je diskuse na téma zda to je slušné a jak na to lidi budou v delší perspektivě reagovat podle mne žádoucí, byť uznávám že tohle není ideální místo. Pokud by to někdo chtěl a uměl přesunout jinam, nejsem proti.

    Třeba se ukáže, že vzhledem k tomu že ty dva servery mají stejné zaměření tak kdo to nedá vždy do obou je sám proti sobě, a vznikne někde ještě jinde formulář umožňující paralelní zadávání. No, doufám že ne.

    A nebo můžeme najít nějaký flame o multipostingu na Usenetu a opsat argumenty.
    1.5.2008 02:09 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    O důvod víc nečíst rootí diskuse, když tam je to samé jako tady :-) Je to fakt otravný. Vlízt na jeden web, věnovat čas přečtení otázky a zamyšlení se nad ní, případně odpovědět, pak se zkusit kouknout co je nového na druhém webu, věnovat čas přečtení otázky... hm tu už jsem někde viděl... a člověk by tazateli to kliknutí a pět sekund navíc nejraději rozmlátil o hlavu. To není vtip nebo ironie, myslím to vážně. Pět sekund tady, pět sekund tam, a když to takhle začnou dělat všichni, čtení diskusí a řešení cizích problémů už nebude zábava, ale práce, a práci bez zábavy já zadarmo nedělám. Je to vlastně takový spam. Fakt nepotřebuju číst třikrát za den stejnou věc.

    Navíc pokud se stane to, že jedna množina lidí bude chodit jen na Root a druhá jen na AbcLinuxu, pak jednu stejnou odpověď v ideálním případě píšou dva lidi. Místo toho by ji ale mohl psát jen jeden a druhý se věnovat něčemu jinému/někomu dalšímu. Přeloženo pro tebe: plýtvají se prostředky.
    29.4.2008 17:05 crusoe
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    V pripade C++ , by bolo zaujimave pouzit inline
    oroborus avatar 29.4.2008 18:52 oroborus | skóre: 20 | blog: Bulanci
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    >V pripade C++ , by bolo zaujimave pouzit inline

    V podstate moze pouzit klucove slovo inline aj v prekladacoch jazyka C, ktore podporuju standard C99

    Zdroj : wikipedia
    29.4.2008 22:20 jas
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    Pri gcc sa pouziva prepinac -std=c99, defaultne berie, myslim c89.
    30.4.2008 14:22 Ivan
    Rozbalit Rozbalit vše OT: Re: jazyk C: prepis funkce na makro
    Ahoj, muzu se zeptat na co to potrebujes? Takovyhle veci jsou "Essence of pure evil". Makra preprocesoru by se mela pouzivat co nejmene a urcite ne na takovyhle veci. Makra preprocesoru snizuji prehlednost kodu, to je duvod proc novejsi prog. jazyky uz preprocesor neobsahuji. Otresny priklad kam az to muze vest je treba mozilla. Makra by se mela pouzivat jen pro takove pripady, na ktere prostredky programovaciho jazyka nestaci.
    1.5.2008 02:30 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: jazyk C: prepis funkce na makro
    #define MYSTRLEN(s) strlen(s)
    Škoda že nejdou udělat rekurzivní makra, hned bych pro tebe měl jednu akademicky ukázkovou udpověď.

    btw, v původní funkci: const char *string by bylo lepší; také by místo while šlo použít for, možná by to bylo přehlednější, ale je to věc názoru.

    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.