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í
×
    31.5. 23:55 | Nová verze

    Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

    Ladislav Hagara | Komentářů: 0
    31.5. 17:33 | Nová verze

    Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.

    Ladislav Hagara | Komentářů: 10
    31.5. 17:11 | Komunita

    Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.

    Ladislav Hagara | Komentářů: 3
    31.5. 12:55 | Nová verze

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

    Ladislav Hagara | Komentářů: 0
    31.5. 11:22 | Zajímavý článek

    David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …

    Ladislav Hagara | Komentářů: 9
    30.5. 22:44 | Nová verze

    Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.

    Ladislav Hagara | Komentářů: 0
    30.5. 21:22 | Zajímavý článek

    Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:44 | Pozvánky

    V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:22 | Nová verze

    Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 15
    29.5. 22:11 | Nová verze

    Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.

    Ladislav Hagara | Komentářů: 7
    Rozcestník

    Mě z toho GCC trefí ...

    17.8.2006 16:58 | Přečteno: 1417× | Linux | poslední úprava: 17.8.2006 19:58

    Tak jsem narazil na další problém s GCC.

    template<typename T>
    class BaseString{
    protected:
      ...
    public:
      ...
      T& operator[]( unsigned int pos );
      const T& operator[]( unsigned int pos ) const;
      // V tomhle bude problém
      operator T*();
      operator const T*() const;
    };
    

    V kódu je následující:

    // pathW je BaseString<wchar_t>, DIR_SLASH je define L'/' nebo L'\\' dle systému
    return ( pathW.length() == 1 && pathW[0] == DIR_SLASH );
    

    A co se dá čekat od GCC jiného než

    ./Toolkit/FileUtils.cpp:120: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
    ./Toolkit/String.h:378: note: candidate 1: T& Toolkit::BaseString<T>::operator[](unsigned int) [with T = wchar_t]
    ./Toolkit/FileUtils.cpp:120: note: candidate 2: operator[](wchar_t*, int) <built-in>
    

    Proč dopr*ele se snaží o ten vestavěný operátor. Zase se prostě rozhodl, že je možné přetypovat BaseString<wchar_t> na wchar_t*, tak hned začal dělat chytrého a cpe mi to. Já se ho ale neprosil. Teď jak z toho ven. Ten operátor k přetypování je pro mě životně důležitý a funkci kvůli tomu tam nechci.

           

    Hodnocení: 28 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    17.8.2006 17:34 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Problém bude někde jinde. Když to napíšu tak, jak to uvádíte, gcc (4.1) s tím nemá žádný problém.
    msk avatar 17.8.2006 18:01 msk | skóre: 27 | blog: msk
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Ci to nebude starsou verziou gcc. Jo hold, 4 je 4, ale co tie predosle paskvily?
    17.8.2006 18:03 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    V trojkové řadě skutečně byly v implementaci C++ chyby, ale tipoval bych, že tohle není ten případ. Většinou je totiž čtyřková řada na syntaxi přísnější než starší verze.
    Jardík avatar 17.8.2006 18:05 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Problém je určitě tady. GCC si to prostě chce přetypovat. Když odstraním "operator T*" tak to funguje. GCC 4.1.1.
    Věřím v jednoho Boha.
    17.8.2006 18:16 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...

    Ne, není. Zkuste si toto

    #define DIR_SLASH L'/'
    
    template<typename T>
    class BaseString{
    protected:
    public:
      unsigned length() const { return 0; }
      T& operator[]( unsigned int pos );
      const T& operator[]( unsigned int pos ) const;
      // V tomhle bude problém
      operator T*();
      operator const T*() const;
    };
    
    
    typedef BaseString<wchar_t> wstr;
    
    bool isslash(const wstr& pathW)
    {
      return ( pathW.length() == 1 && pathW[0] == DIR_SLASH );
    }
    

    uložit do souboru a přeložit (nelinkovat). Mé gcc ani nepípne, dokonce ani s -Wall Problém je tedy někde jinde než v tom, co jste nám ukázal.

    Jardík avatar 17.8.2006 18:21 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    $ g++ -c -Wall test.cpp
    test.cpp: In function ‘bool isslash(const wstr&)’:
    test.cpp:20: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
    test.cpp:9: note: candidate 1: const T& BaseString<T>::operator[](unsigned int) const [with T = wchar_t]
    test.cpp:20: note: candidate 2: operator[](const wchar_t*, int) <built-in>
    test.cpp:20: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second:
    test.cpp:9: note: candidate 1: const T& BaseString<T>::operator[](unsigned int) const [with T = wchar_t]
    test.cpp:20: note: candidate 2: operator[](const wchar_t*, int) <built-in>
    
    Věřím v jednoho Boha.
    17.8.2006 18:23 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Mám-li být upřímný, nechce se mi teď zkoumat specifikaci, zda má gcc pravdu, ale tipoval bych, že spíš ano. Pokud napíšete něco, co lze vyložit podle pravidel jazyka vyložit nejednoznačně - a to jste udělal - vidím problém ve vašem zdrojáku a ne v překladači.
    Jardík avatar 17.8.2006 18:26 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    To je sice hezké, ale ...
    Zajímavé je, že vám to ani nepípne. Přitom stejná verze GCC.
    Věřím v jednoho Boha.
    17.8.2006 18:44 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Úplně stejná není, já mám 4.1.0, takže je možné, že to ve 4.1.1 opravili.
    Jardík avatar 17.8.2006 18:36 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    K tomu nejednoznačně. Já myslím, že je to jednoznačné až dost. Normální kompilátor by si měl nejprve projít operátory té třídy, když se pak hodí, použí je, a poté teprve hledat alternativy. Ale stejně mě deptá, že vám to funguje.
    Věřím v jednoho Boha.
    17.8.2006 18:45 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Zkuste mu ten index zapsat explicitně jako '0L', pak by to mohlo přesně odpovídat deklaraci.
    17.8.2006 18:47 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Na druhou stranu je možná právě tohle důvod, proč ve standardní knihovně ten přetypovávací operátor není.
    18.8.2006 12:37 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    ved presiel ... ale otazka znie, mal koder na mysli priamo operator [], alebo chcel najprv pouzit operator pretypovania na pointer a potom pouzit [] ?

    imho, co tam ten operator pretypovania (a dokonca const) na pointer robi? Kandiduje na uchylku roku?

    18.8.2006 12:46 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Právě že otázka nezní, co tím měl autor na mysli, ale co to znamená podle specifikace jazyka - a to mu překladač sdělil.
    18.8.2006 14:01 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    no tak som to myslel, ze taku otazku si polozi kompilator, ktory, aspon z mojho pohladu, by autorove myslienky mal pochopit spravne. A ak otazku nevie jednoznacne zodpovedat, tak krici.
    Zaujimave je, ako sa ludia naucili povazovat programy za zive, rozmyslajuce entity.
    Zase se prostě rozhodl, že je možné přetypovat BaseString<wchar_t> na wchar_t*, tak hned začal dělat chytrého a cpe mi to. Já se ho ale neprosil

    Hmm, a teraz som si vlastne vsimol, ze autor vlastne ani nevie, co naprogramoval :-)
    18.8.2006 14:22 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Mne by spíš zajímalo, proč to na x86_64 projde. Ale to by asi chtělo pořádně si přečíst příslušnou část specifikace.
    Jardík avatar 17.8.2006 18:18 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Zkuste zkompilovat toto:
    #include <wchar.h>
    #include <memory>
    
    class WideString{
    protected:
    	wchar_t* buffer;
    public:
    	WideString( const wchar_t *text )
    	{
    		buffer = wcsdup(text);
    	}
    	~WideString()
    	{
    		free(buffer);
    	}
    	
    	wchar_t& operator[](unsigned int pos)
    	{
    		return buffer[pos];
    	}
    	
    	const wchar_t& operator[](unsigned int pos) const
    	{
    		return buffer[pos];
    	}
    	
    	operator wchar_t*()
    	{
    		return buffer;
    	}
    	
    	operator const wchar_t*() const
    	{
    		return buffer;
    	}
    };
    
    int main( int argc, char **argv )
    {
    	WideString str( L"TESTIK" );
    	if( str[0] == L'T' ) str[0] = L't';
    	return 0;
    }
    
    Věřím v jednoho Boha.
    17.8.2006 18:21 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Žádná chyba, žádný warning.
    Mikos avatar 17.8.2006 18:54 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Jen tak na zkoušku jsem to zkusil (v C ani C++ se moc extra zrovna nevyznam), ale chyb mi to vyhodilo taky.

    GCC 4.1.1 (defaultní v Arch Linuxu):
    [mikos@tauri temp]$ g++ -c -Wall test.cpp
    test.cpp: In function ‘int main(int, char**)’:
    test.cpp:41: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst
     conversion for the second:
    test.cpp:17: note: candidate 1: wchar_t& WideString::operator[](unsigned int)
    test.cpp:41: note: candidate 2: operator[](wchar_t*, int) <built-in>
    test.cpp:41: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst
     conversion for the second:
    test.cpp:17: note: candidate 1: wchar_t& WideString::operator[](unsigned int)
    test.cpp:41: note: candidate 2: operator[](wchar_t*, int) <built-in>
    test.cpp:41: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst
     conversion for the second:
    test.cpp:17: note: candidate 1: wchar_t& WideString::operator[](unsigned int)
    test.cpp:41: note: candidate 2: operator[](wchar_t*, int) <built-in>
    test.cpp:41: error: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst
     conversion for the second:
    test.cpp:17: note: candidate 1: wchar_t& WideString::operator[](unsigned int)
    test.cpp:41: note: candidate 2: operator[](wchar_t*, int) <built-in>
    
    A jen pro zajímavost GCC 3.3.6:
    [mikos@tauri temp]$ g++3 -c -Wall test.cpp
    test.cpp: In function `int main(int, char**)':
    test.cpp:41: error: ISO C++ says that `wchar_t& WideString::operator[](unsigned
       int)' and `operator[]' are ambiguous even though the worst conversion for
       the former is better than the worst conversion for the latter
    test.cpp:41: error: ISO C++ says that `wchar_t& WideString::operator[](unsigned
       int)' and `operator[]' are ambiguous even though the worst conversion for
       the former is better than the worst conversion for the latter
    test.cpp:41: error: ISO C++ says that `wchar_t& WideString::operator[](unsigned
       int)' and `operator[]' are ambiguous even though the worst conversion for
       the former is better than the worst conversion for the latter
    test.cpp:41: error: ISO C++ says that `wchar_t& WideString::operator[](unsigned
       int)' and `operator[]' are ambiguous even though the worst conversion for
       the former is better than the worst conversion for the latter
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    Mikos avatar 17.8.2006 18:56 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Ale musim říct, že GCC důvěřuji a navíc GCC 4.1.x (alespoň co sem tak všude četl) se normy drží opravdu pěkně, takže chyba asi bude vážně někde v tom kódu ;-)

    Nicméně je opravdu velmi zvláštní, že vám to prošlo bez problémů...
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    David Watzke avatar 17.8.2006 18:57 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Nicméně je opravdu velmi zvláštní, že vám to prošlo bez problémů...
    Vidím to na architekturu...
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Mikos avatar 17.8.2006 18:58 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Architektura je prachobyčejná x86 :-)
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    David Watzke avatar 17.8.2006 18:59 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    No právě :-)
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    17.8.2006 21:39 Zdeněk Burda | skóre: 61 | blog: Zdendův blog | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Myslíš, že na UltraSPARCu to bude lepší? :-)
    -- Nezdar není hanbou, hanbou je strach z pokusu.
    David Watzke avatar 17.8.2006 21:54 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Nevím, ale na AMD64 je :-D
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Jardík avatar 17.8.2006 22:06 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    To může být třeba tím, že se pro indexování polí nepoužívá int, ale třeba "long long".
    Věřím v jednoho Boha.
    17.8.2006 22:38 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Spíš to bude souviset s tím, že sizeof(int) != sizeof(long)
    David Watzke avatar 17.8.2006 19:00 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Jj, když GCC dám ještě -m32, taky hodí chybu.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    17.8.2006 19:04 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    A když se ten index zapíše jako '0U' (nebo operátor [] deklaruje jako int), projde to i s -m32.
    David Watzke avatar 17.8.2006 18:57 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    GCC 4.1.1 na Gentoo/AMD64 v pohodě bez warningů...
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    18.8.2006 09:37 jekub | skóre: 9 | blog: noblog
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    No a co si má podle Vás překladač při použití str[0] vybrat? WideString::operator[], nebo WideString::operator wchar_t* ?

    Pokud to upravíte na str[0u], mělo by to fungovat. Doporučuju nastudovat implicitní konverze v C++.
    18.8.2006 09:43 jekub | skóre: 9 | blog: noblog
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    A ještě zkuste toto

    int main( int argc, char **argv )
    {
    	WideString str( L"TESTIK" );
       free(str);
    
    	return 0;
    }
    David Watzke avatar 17.8.2006 18:38 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Sorry, ale s/Mně/Mě/g, 2. a 4. pár = mě, 3. a 6. pád = mně.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    David Watzke avatar 17.8.2006 18:38 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    s/pár/pád/ :-D
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    17.8.2006 19:10 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Prestanou uz lidi nekdy zapraskavat thready temyhle zbytecnymi spam prispevky?
    17.8.2006 19:12 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Zbytečný není a spam už vůbec ne…
    17.8.2006 21:56 pasmen | skóre: 45 | blog: glob | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Zbytecny je. Koho v threadu o gcc zajima lingvisticka vlozka? Nikoho, akorat to rusi to podstatne. Pardon, mozna Vas to zajima...
    17.8.2006 22:01 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Mne spíš ruší, když vidím tu hrubku na titulní stránce…
    David Watzke avatar 17.8.2006 20:06 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Taky doufám, že si to všichni zapamatují :-D
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Jardík avatar 17.8.2006 19:59 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    Popraveno.
    Věřím v jednoho Boha.
    Jardík avatar 17.8.2006 19:59 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Mně z toho GCC trefí ...
    s/Popraveno/Opraveno/g.
    Věřím v jednoho Boha.
    18.8.2006 02:58 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Nemůžu si pomoct, ale jak už jsem upozorňoval v minulém (snad předminulém) blogu, tento kód není multiplatformní. V systému kde je wchar_t pouze 16 bit a znak je větší než 65535 to není schopné fungovat.
    18.8.2006 03:02 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Není to spíš problém chybně navržené implementace, pokud její wchar_t není schopen pokrýt potřebný rozsah znaků?
    18.8.2006 16:02 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Myslím že už je příliš pozdě to měnit (ve Win), takže se s tím musíme smířit nebo si udělat vlastní string (můj případ).
    Mikos avatar 18.8.2006 16:05 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Nebo prostě a jednoduše se vykašlat na rozbité nefunkční platformy :-P
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    18.8.2006 16:12 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Takže se na věky věků bude muset Unicode omezit na necelých 2^16 znaků? Tak to si s ním nemuseli dávat tolik práce…
    19.8.2006 03:32 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Win 2000 používá UCS2, ale WinXP používá UTF16, to je důvod mé reakce.

    Předpoklad že wchar_t je jeden znak je prostě špatný. Jak říkám, v linuxu to funguje, jinde nemusí.
    19.8.2006 09:47 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...

    To není špatný předpoklad, protože je to předpoklad, vycházející ze specifikace jazyků C

    3.7.3 wide character bit representation that fits in an object of type wchar_t, capable of representing any character in the current locale

    a C++

    3.9.1.5 Type wchar_t is a distinct type whose values can represent distinct codes for all members of the largest extended character set specified among the supported locales (22.1.1).

    Takže trvám na tom, že je-li něco špatně, je to implementace widestringů ve Windows (vypadá-li tak, jak tvrdíte). Kdyby totiž měl být wchar_t 16-bitový typ a widestringy by měly být v UTF-16, nemělo by smysl je vůbec zavádět, protože by proti klasickým stringům v UTF-8 naprosto nic nepřinášely.

    19.8.2006 12:45 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Jenže když se ve windows objevil poprvé unicode (UCS2), tak si mysleli že 16 bit wchar_t bude stačit a ve standardu to tak bylo. Změna proběhla pozděj a to jak jsem psal bylo příliš pozdě na to změnit API (přešli na UTF16).

    Jinak máte pravdu, že takový wchar_t nepřináší nic nového oproti UTF8, plný souhlas.

    Šlo mi jen o to, že když chci psát program, který poběží ve windows a v linuxu, tak je úvaha že wchar_t = jeden znak špatná, toď vše.
    19.8.2006 16:34 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Ne. Co je špatné, je windowsová implementace - vypadá-li opravdu tak, jak tvrdíte. V ISO specifikaci obou jazyků je jasně a zřetelně řečeno, že wchar_t je datový typ, který pokrývá celý rozsah znakové sady používaného locale, takže jeden wchar_t podle specifikace jazyka odpovídá jednomu znaku (to je také důvod, proč byly vůbec wchar_t a widestring zaveden). Tak je ten typ definován a tak má fungovat. Pokud tak někde nefunguje, není to korektní implementace ISO C resp. ISO C++.
    19.8.2006 22:50 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Máte pravdu, není to korektní.

    Chtěl jsem jen upozornit na to že to tak je a žádný smrtelník s tím nic neudělá. Jestli má frčet aplikace jen pod linuxem, není co řešit.

    Aby jste mi věřili:
    #include <stdio.h>
    #include <wchar.h>
    int main(int arg, char* argv[])
    {
    	printf("%u\n", sizeof(wchar_t));
    	return 0;
    }
    výstup:
    2
    kompilováno ve win, pod gcc i ve visual studiu, ahoja
    Mikos avatar 19.8.2006 23:10 Mikos | skóre: 34 | blog: Jaderný blog | Praha
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Jestli má frčet aplikace jen pod linuxem, není co řešit.
    Správně jste měl říct: "Jestli má frčet aplikace pod jakýmkoliv rozumným operačním systémem, není co řešit."
    CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!
    20.8.2006 00:06 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Já ale nehodlám rýpat do žádného operačního systému, navíc si myslím že na embedded zařízeních je wchar_t také většinou 16 bit.
    20.8.2006 02:07 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Což o to, 16-bitový wchar_t specifikaci sám o sobě neodporuje. Pokud pokryje celý rozsah použité znakové sady a pokud jeden widechar bude jeden znak, je to v pořádku. Chybou je, pokud bude jeden znak zapisován více widechary, tj. začne se zavádět nějaký "multi-widechar string", který v sobě spojí nevýhody MBS a WCS.
    20.8.2006 02:11 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Prostě chci říci, že primární důvod, proč byl vůbec typ wchar_t a WCS zaveden, je to, aby bylo možné opět interně pracovat s reprezentací řetězců, kde jedna položka pole odpovídá jednomu znaku. Implementace, kde je jeden znak popsán více widechary, odporuje jednak specifikaci, jednak zdravému rozumu a do třetice je úplně k ničemu.
    20.8.2006 15:23 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Já s tím ale plně souhlasím a to je důvod, proč jsem si musel napsat svůj string který je vždy 32 bit (byly i jiné důvody)

    Pro mě osobně je dobrá implementace řetězců základ:-D
    12.9.2006 16:01 zde | skóre: 9 | blog: Linuch | Brno
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Můžete uvést jedinný užitečný a potřebný znak, který je v UTF-{8|16} a není v UCS2 ?
    Táto, ty de byl? V práci, já debil.
    19.8.2006 03:38 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: Mě z toho GCC trefí ...
    Ještě bych jen doplnil že Win má sice 16 bit unicode, ale znaky pojme všechny díky UTF16 kódování, stejný připad je třeba v javě, .net a qt.
    alblaho avatar 18.8.2006 09:38 alblaho | skóre: 17 | blog: alblog
    Rozbalit Rozbalit vše Složité C++
    Vzpomněl jsem si, co říkal Martin Fowler na nějaké konfeře o Ruby. "Už jsem v C++ dlouho neprogramoval. Ale ne _dost_ dlouho." :-)

    Ne snad, že by bylo C++ nějaké zlo, jen je složité jaxfina.
    12.9.2006 15:59 zde | skóre: 9 | blog: Linuch | Brno
    Rozbalit Rozbalit vše Re: Složité C++
    C++ JE zlo.
    Táto, ty de byl? V práci, já debil.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.