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 01:23 | Komunita

Phoronix spustil 2017 Linux Laptop Survey. Tento dotazník s otázkami zaměřenými na parametry ideálního notebooku s Linuxem lze vyplnit do 6. července.

Ladislav Hagara | Komentářů: 2
23.6. 22:44 | Nová verze

Po třech měsících vývoje od vydání verze 5.5.0 byla vydána verze 5.6.0 správce digitálních fotografií digiKam (digiKam Software Collection). Do digiKamu se mimo jiné vrátila HTML galerie a nástroj pro vytváření videa z fotografií. V Bugzille bylo uzavřeno více než 81 záznamů.

Ladislav Hagara | Komentářů: 1
23.6. 17:44 | Nová verze

Byla vydána verze 9.3 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 2
23.6. 13:53 | Nová verze

Simon Long představil na blogu Raspberry Pi novou verzi 2017-06-21 linuxové distribuce Raspbian určené především pro jednodeskové miniaturní počítače Raspberry Pi. Společně s Raspbianem byl aktualizován také instalační nástroj NOOBS (New Out Of the Box Software). Z novinek lze zdůraznit IDE Thonny pro vývoj v programovacím jazyce Python a především offline verzi Scratche 2.0. Ten bylo dosud možné používat pouze online. Offline bylo možné používat pouze Scratch ve verzi 1.4. Z nového Scratchu lze ovládat také GPIO piny. Scratch 2.0 vyžaduje Flash.

Ladislav Hagara | Komentářů: 0
22.6. 14:24 | Nová verze

Opera 46, verze 46.0.2597.26, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 59. Z novinek lze zmínit například podporu APNG (Animated Portable Network Graphics). Přehled novinek pro vývojáře na blogu Dev.Opera. Oznámení o vydání zmiňuje také první televizní reklamu.

Ladislav Hagara | Komentářů: 0
22.6. 13:37 | IT novinky

I čtenáři AbcLinuxu před dvěma lety vyplňovali dotazníky věnované Retro ThinkPadu. Nyní bylo potvrzeno, že iniciativa Retro ThinkPad je stále naživu a Lenovo připravuje speciální edici ThinkPadu jako součást oslav jeho 25. výročí.

Ladislav Hagara | Komentářů: 21
22.6. 10:22 | Komunita

Bylo oznámeno, že frontend a runtime programovacího jazyka D bude začleněn do kolekce kompilátorů GCC (GNU Compiler Collection). Správcem byl ustanoven Iain Buclaw.

Ladislav Hagara | Komentářů: 7
21.6. 18:47 | IT novinky
Bulharská firma Olimex je známá jako výrobce kvalitních mini arm desek, u nichž se snaží být maximálně open source. Kromě velké otevřenosti taktéž zaručují dlouhodobou podporu výroby, což je vítáno ve firemním prostředí. Nyní firma ohlásila ESP32-GATEWAY, malou IoT desku s Wifi, Bluetooth, Ethernetem a 20 GPIO porty za 22EUR. Tato malá deska je ořezanou verzí ESP32-EVB.
Max | Komentářů: 21
21.6. 18:00 | Zajímavý článek

LinuxGizmos (v dubnu loňského roku přejmenován na HackerBoards a v lednu letošního roku zpět na LinuxGizmos) zveřejnil výsledky čtenářské ankety o nejoblíbenější jednodeskový počítač (SBC) v roce 2017. Letos se vybíralo z 98 jednodeskových počítačů (Tabulky Google). Nejoblíbenějšími jednodeskovými počítači v letošním roce jsou Raspberry Pi 3 Model B, Raspberry Pi Zero W a Raspberry Pi 2 Model B.

Ladislav Hagara | Komentářů: 0
21.6. 14:22 | Pozvánky

Ne-konference jOpenSpace 2017 se koná od 13. do 15. října 2017 v hotelu Farma u Pelhřimova. Registrace účastníků je nutná. Více informací na stránkách ne-konference.

Zdenek H. | Komentářů: 0
Chystáte se pořídit CPU AMD Ryzen?
 (6%)
 (31%)
 (1%)
 (9%)
 (44%)
 (9%)
Celkem 830 hlasů
 Komentářů: 65, poslední 1.6. 19:16
    Rozcestník

    Dotaz: C - konverze typu a kontrola

    8.6.2009 10:07 jarda
    C - konverze typu a kontrola
    Přečteno: 576×

    Hezky den

    mam toto v c:

    #include <netinet/in.h>
    #define short unsigned int UWORD

    a nekde toto:

    UWORD i = 1;
    i = htons(i); //htons pracuje in/out jen s UWORD, resp uint16_t

    a KDEVELOP stale hlasi:

    warning: conversion to 'short unsigned int' from 'int' may alter its value

    Jak utnout tipec tomuto hlaseni, a ne zrovna tim ze vypnu kontroly typu?

    Predem diky

    Jarda

     

     

    Odpovědi

    8.6.2009 10:52 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Když je to potřeba, je možné použít přetypování, tj. před proměnnou, která se na dané místo typově nehodí, je třeba vložit správný typ v kulatých závorkách. Časté je to zejména u ukazatelů, zejména pak alokace paměti.

    V tomto případě se mi ale nelíbí to makro, správně by druhý řádek měl začínat klíčovým slovem typedef.
    8.6.2009 11:04 graviton
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    #define short unsigned int UWORD
    to není tak docela dobře...
    Neměl to být spíš typedef?
    Nebo když už, tak aspoň #define UWORD short unsigned int
    8.6.2009 13:25 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Navíc bych se vykašlal na unsigned short int a použil uint16_t.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.6.2009 13:27 jardaz
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola

    Sorry, ja se pri opisovani spletl, ma tam byt to co jste uvedl (viz nize), ale to problem neresi.

    #define UWORD short unsigned int

    rovnez to neresi ani toto:

    i=(UWORD)htons((UWORD)i);

    ci toto (ikdyz zrusim makro a i definuji jako uint16_t):

    i=(uint16_t)htons((uint16_t)i);

     

    8.6.2009 13:50 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Podle tohohle (část, kde cituje z manuálu gcc) je to spíš chybka u překladače.
    i=(uint16_t)htons((uint16_t)i);
    Ty přetypování bych rozhodně vyhodil, protože proměnné odpovídají hlavičce funkce a takhle se to jenom zatemní.
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    8.6.2009 16:10 jardaz
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola

    Ja si to taky myslel, ale radsi se zeptam, protoze nikde neni duvod pouzivat int. No a ta hlaska nedava vice info, zda je to vuci leve hodnote ci parametru funkce. Takze dle odkazu off -Wconversion.

    8.6.2009 16:18 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Možná by nebylo od věci vyměnit překladač nebo prověřit situaci při ručním překladu jediného zdrojového souboru v příkazovém řádku.
    8.6.2009 18:38 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola

    Asi to bude záviset na verzi gcc (nebo glibc). Právě jsem zkusil přesně ten původní kód:

    #include <stdio.h>
    #include <netinet/in.h>
    
    #define UWORD short unsigned int
    
    int main()
    {
      UWORD i = 1;
      i = htons(i);
      printf("%hu\n", i);
      return 0;
    }
    

    a obešlo se to bez protestů i s '-Wall -Wextra'. Použil jsem gcc 4.3.2 a glibc 2.9.

    8.6.2009 19:03 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Asi to bude záviset na verzi gcc (nebo glibc)
    Vypadá to tak: gcc (GCC) 4.1.2 (Gentoo 4.1.2) řve, gcc (GCC) 4.4.0 20090526 (prerelease) je v pohodě.
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    Fuky avatar 8.6.2009 21:58 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola

    U mě neřve ani jedna verze gcc, glibc 2.7-18:

    gcc-3.3 (GCC) 3.3.5 (Debian 1:3.3.5-13)
    gcc-3.4 (GCC) 3.4.6 (Debian 3.4.6-9)
    gcc-4.1 (GCC) 4.1.3 20080704 (prerelease) (Debian 4.1.2-25)
    gcc-4.2 (GCC) 4.2.4 (Debian 4.2.4-6)
    gcc-4.3 (Debian 4.3.2-1.1) 4.3.2
    

    9.6.2009 09:30 jardaz | Opava
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola

    Hezky den

    vsem diky ze se problemu venujete, tady davam info, kdy se to generuje na mem sw (stejny kod jak v prizpevku vyse):

    • KDevelop 3.5.4 pod KDE 3.5.10-3.fc10,
    • gcc version 4.3.2 20081105 (Red Hat 4.3.2-7),
    • FC10
    • a nastaveni překladače: -O0 -Werror-implicit-function-declaration -Wimplicit-int -Wuninitialized -Wconversion -Wmissing-declarations -pg -freg-struct-return -O -g3, 

    tak to hlasi testwarning.c:16: warning: conversion to 'short unsigned int' from 'int' may alter its value. Vyradim-li prepinac -Wconversion, tak to hlaseni zmizi, na to vsak upozornil jiz v prispevku Vojtech Horky, takze pouziti tohoto prepinace je dvojsecne, sice oznaci mista, kde se pouzije implicitni pretypovani, ale oznaci varovanim i to kde jiste k pretypovani vubec nedochazi.

    9.6.2009 10:07 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Zajímavé zjištění: samožné -Wconversion nestačí, ale když přidám optimalizaci, začne se ta hláška objevovat i u mne. Zřejmě to souvisí s tím, že ntohs() je definováno jinak při překladu s optimalizací a jinak bez ní. Ale teď bohužel nemám čas rozplétat všechny ty #ifdef-y v hlavičkových souborech.
    9.6.2009 10:34 jardaz | Opava
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola

    Ja se dival na ten hlavickovy soubor, jednoznacne zneho vyplyva, ze hto... funkce jsou tam ruzne definovany podle optimalizace a zpusobu uschovy udaju v pameti, prakticky lze rici, ze pri max. optimalizaci by stacilo misto funkce pouzit inline assembler a to operaci bswap x (x znaci nejaky ten parametr) a kdo vi jak se to pak jevi prekladaci. Chci jen podotknout, ze htons neni jedine misto, kde se ten prepinac a warning objevuje, vybral jsem ji zcela nahodne.

    9.6.2009 10:47 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Příčina je zřejmě v této části netinet/in.h:
    #ifdef __OPTIMIZE__
    /* We can optimize calls to the conversion functions.  Either nothing has
       to be done or we are using directly the byte-swapping functions which
       often can be inlined.  */
    # if __BYTE_ORDER == __BIG_ENDIAN
    /* The host byte order is the same as network byte order,
       so these functions are all just identity.  */
    # define ntohl(x)       (x)
    # define ntohs(x)       (x)
    # define htonl(x)       (x)
    # define htons(x)       (x)
    # else
    #  if __BYTE_ORDER == __LITTLE_ENDIAN
    #   define ntohl(x)     __bswap_32 (x)
    #   define ntohs(x)     __bswap_16 (x)
    #   define htonl(x)     __bswap_32 (x)
    #   define htons(x)     __bswap_16 (x)
    #  endif
    # endif
    #endif
    
    Můj zkušební kód po gcc -E -O (Debian 4.3.3-7) dopadne takto:
    int main() {
      unsigned short int w1, w2;
      w1 = 0x1234;
      w2 = (__extension__ ({
        register unsigned short int __v, __x = (w1);
        if (__builtin_constant_p (__x))
          __v = ((((__x) >> 8) & 0xff) | (((__x) & 0xff) << 8));
        else
          __asm__ ("rorw $8, %w0" : "=r" (__v) : "0" (__x) : "cc");
        __v;
      }));
      printf("%x\n", w2);
      return 0;
    }
    
    Přiřazení s w2 = … bylo původně w2 = ntohs(w1), při zapnutých optimalizacích tedy w2 = __bswap_16(w1). Rozvoj makra je v příspěvku vidět. Bitové operace v první větvi podmínky vyvolají onu hlášku. Kód se navíc vykoná jen tehdy, pokud je hodnota známá během překladu, pro proměnnou se použije vložený kus asembleru.
    9.6.2009 11:23 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Kód se navíc vykoná jen tehdy, pokud je hodnota známá během překladu, pro proměnnou se použije vložený kus asembleru.

    V podstatě máte pravdu, ale formulace "kód se vykoná" není přesná. To větvení je tam právě proto, že je-li argument konstanta, (neefektivní) výpočet podle vozorečku provede samotný překladač a do kódu jde rovnou výsledná konstanta (stejně jako když napíšete třeba int a = 1 + 1).

    9.6.2009 11:26 #Tom | skóre: 32 | blog: Inspirace, aneb co jsem kde vyhrabal
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    Díky za upřesnění.
    9.6.2009 10:15 petris_ | skóre: 12
    Rozbalit Rozbalit vše Re: C - konverze typu a kontrola
    includujte arpa/inet.h

    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.