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 04:10 | Nová verze

Po 10 týdnech vývoje od vydání Linuxu 4.9 (zprávička) oznámil Linus Torvalds, mj. již 20 let žijící v USA, vydání Linuxu 4.10 (LKML). Přehled nových vlastností a vylepšení například na Kernel Newbies a v Jaderných novinách (1, 2 a 3). Kódové jméno Linuxu 4.10 je Fearless Coyote.

Ladislav Hagara | Komentářů: 1
včera 15:55 | Zajímavý projekt

Vyzkoušet si příkazy a vyřešit několik úkolů lze na stránkách Commandline Challenge (CMD Challenge). Úkoly lze řešit různými způsoby, důležitý je výsledek. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 12
18.2. 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 27
17.2. 15:30 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že bezpečnostní experti objevili nový typ malwaru, jenž cílí na open source e-commerce platformu Magento. Malware je zajímavý tím, že se jedná o první svého druhu, jehož kód zůstává skrytý v SQL databázi zasaženého e-shopu. Škodlivý kód je volán pomocí tzv. SQL trigerru, který je spouštěn při každém vytvoření objednávky v systému.

Ladislav Hagara | Komentářů: 2
17.2. 09:00 | Nová verze

Bylo vydáno Ubuntu 16.04.2 LTS, tj. druhé opravné vydání Ubuntu 16.04 LTS s kódovým názvem Xenial Xerus. Přehled novinek v poznámkách k vydání a v přehledu změn.

Ladislav Hagara | Komentářů: 55
17.2. 06:00 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje tvorbě pluginů (modulů) pro bitmapový grafický editor GIMP. Pomocí pluginů lze GIMP rozšiřovat o další funkce. Implementovat lze například nové filtry nebo pomocné utility pro tvorbu animací či poloautomatickou retuš snímků.

Ladislav Hagara | Komentářů: 6
16.2. 23:32 | Komunita

Do 30. března se lze přihlásit do dalšího kola programu Outreachy, jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 30. května do 30. srpna 2017, v participujících organizacích lze vydělat 5 500 USD. Jedná se již o 14. kolo tohoto programu.

Ladislav Hagara | Komentářů: 11
16.2. 23:13 | Nová verze

Byla vydána verze 0.92.1 svobodného multiplatformního vektorového grafického editoru Inkscape. Přehled novinek v poznámkách k vydání. Řešen je mimo jiné problém s verzí 0.92, jež rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Více v příspěvku na blogu Davida Revoye, autora open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu.

Ladislav Hagara | Komentářů: 0
16.2. 16:26 | Bezpečnostní upozornění

Byla vydána verze 1.1.0e kryptografické knihovny OpenSSL. Dle bezpečnostního upozornění 20170216 byla opravena závažná bezpečnostní chyba CVE-2017-3733.

Ladislav Hagara | Komentářů: 1
16.2. 13:03 | Pozvánky

GNOME hackaton proběhne v Brně na FIT VUT v Red Hat Labu (budova Q) v pondělí 20. února od 15:00. Registrace není nutná, ale pokud dáte na FaceBooku vědět, že plánujete dorazit, pomůže to s plánováním.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (13%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 660 hlasů
 Komentářů: 52, poslední 13.2. 12:45
Rozcestník
Reklama

Dotaz: C - konverze typu a kontrola

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

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.