Portál AbcLinuxu, 5. května 2024 02:20


Dotaz: Přenositelnost C++ z Linuxu na Windows - ::swprintf

4.6.2009 10:39 Dušan Renát | skóre: 4
Přenositelnost C++ z Linuxu na Windows - ::swprintf
Přečteno: 859×
Odpovědět | Admin
Mám program (který využívá několik knihoven - SDL, SDL_ttf, SDL_gfx, ale v tom nejspíš problém nebude), který jsem úspěšně zkompiloval a spustil na svém i na jednom cizím Linuxu. Při pokusu o zkompilování pod Windows (MinGW nejnovější verze, program mingw32-make, který volá g++) mi to zahlásí chybu, které jednak nerozumím, jednak jsem nic chytrého nenašel nikde na internetu:
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/cwchar:161:
error: `::swprintf' has not been declared
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/cwchar:168:
error: `::vswprintf' has not been declared
mingw32-make: *** [main.o] Error 1
Co se programu týče, háže to na řádku, kde includuju knihovnu iostream. Ví někdo, co to znamená a jak to vyřešit? Budu vděčný za každou pomoc.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.6.2009 11:10 potejo
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Odpovědět | | Sbalit | Link | Blokovat | Admin

Ve windows verzi gcc neni podpora pro siroke znaky, neni to naimplementovane, stalo se me totez, kdyz jsem pouzival prepinac -std=c++98. Kdyz sem ho nahradil -std=gnu++98, tak preklad prosel.

4.6.2009 11:19 Dušan Renát | skóre: 4
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Široké znaky? Myslíš jako víc než osmibitový kódování? UTF a tak?
4.6.2009 11:25 potejo
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf

Podpora pro typ wchar_t viz http://www.mingw.org/category/wiki/wchar_t

4.6.2009 12:16 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Zakladni problem je v tom ze Windows pouziva v rozporu se standardem variabilni kodovani (UTF-16). V principu to znamena reimplementovat nanovo uplne vsechny funkce ktere delaji wchar_t.

Je nejaky zasadni problem proc to nekompilujes MSVC? MSVC je sice hrozny kompilator, ale pokud mas standardni kod, tak to vetsinou sezere.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.6.2009 13:43 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf

V rozporu s jakym standardem? Nic neni potreba reimplementovat.

MSVC byl a je prinejmensim slusny kompilator.

Ac linuxak, tak na vareni z vody moc nejsem.

4.6.2009 14:17 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Standard vyzaduje platnost: jeden wchar_t = jeden znak

Veskere funkce z GCC tohle celkem logicky predpokladaji.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.6.2009 15:40 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Ale tenhle "problém" máte v Linuxu také - UTF-8 je také kódování s proměnnou délkou znaku, dokonce natolik, že se s tím potkáte i u běžných řetězců (UTF-16 si dokonce řada windowsáků plete s UCS-2 a tvrdí že má pevnou délku znaku). Proto existují ty knihovní funkce pro převod mezi multibyte (UTF-8) a widechar (UCS-4) reprezentací, počítá se, že navenek budete používat multibyte (UTF-8) a interně widechar (UCS-4). Na Windows by tedy mělo stačit místo UTF-8 jako multibyte reprezentaci používat UTF-16 a nebylo by potřeba nic měnit. Pokud ovšem nějaká dutá hlava vymyslela, že wchar_t bude šestnáctibitový, tak to je samozřejmě problém.
4.6.2009 16:01 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Ano, jak uz jsem napsal wchar_t je pod Windows 16bit s kodovanim UTF-16 (WinXP a novejsi) nebo UCS-2 (Windows 2000 a starsi). Pod Linuxem je wchar_t 32bit s kodovanim UTF-32.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.6.2009 19:00 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
wchar_t je pod Windows 16bit s kodovanim UTF-16 (WinXP a novejsi)

Tak za něco takového by autoři opravdu zasloužili pár facek.

Pod Linuxem je wchar_t 32bit s kodovanim UTF-32.

Spíš bych řekl UCS-4, i když z praktického hlediska to vyjde nastejno.

4.6.2009 21:13 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Wiki: "Accordingly UCS-4 and UTF-32 are now identical except that the UTF-32 standard has additional Unicode semantics."
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.6.2009 23:12 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Ano, wchar_t je díky windows totálně nepřenositelný typ, stejně jako třeba long. Ale podle mého je UTF8 co se týče zpracování mnohem horší a pomalejší a je mi celkem líto toho, že se v linuxu tak uchytil:(
4.6.2009 23:16 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
UTF-8 se uchytil vsude protoze to je optimalni typ pro ukladani Unicode textu. UTF-32 je optimalni datovy typ pro praci s Unicode texty.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
5.6.2009 00:04 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Důležitá je praxe. Java, .NET a Qt používají UTF-16, v gtk se používá hodně UTF-8.

Mi šlo ale o to, že wchar_t je podle mě nepřenositelný typ.
5.6.2009 01:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Typ wchar_t nikdy nebyl zamýšlen jako přenositelný typ, ale zásadně jako typ pro interní práci s textem. Chtějí se od něj v podstatě jen dvě základní vlastnosti: aby umožnil reprezentovat všechny potřebné znaky a aby umožnil kódování s pevnou délkou znaku a tím i jednodušší (interní) zpracování textu. "Unixový" 32-bitový wchar_t obě tyto vlastnosti splňuje velmi dobře, při použití 16-bitového ale už z principu musíte jednu obětovat (to odpovídá výše zmíněné volbě mezi UCS-2 a UTF-16).
5.6.2009 01:56 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
My si nerozumíme. Co myslíte pod pojmem přenositelný? Já jsem myslel, že je tu diskuze o programování, takže onou přenositelností jsem myslel psaní přenositelných aplikací, které budou využívat wchar. A to podle mě nejde, protože pod Windows nemáte právě tu jistotu, o které mluvíte.

Já osobně to řeším používáním 32bitových řetězců (všude), ale i mé řešení může jít někomu proti srsti:-)
5.6.2009 09:20 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Já jsem myslel, že je tu diskuze o programování, takže onou přenositelností jsem myslel psaní přenositelných aplikací, které budou využívat wchar. A to podle mě nejde, protože pod Windows nemáte právě tu jistotu, o které mluvíte.

Pokud nepřenositelností rozumíte to, že to nebude fungovat na překladačích (s knihovnami), které sice implementují funkce definované standardem ISO C99, ale implementují je v rozporu s tímto standardem, pak máte pravdu. Ale to není speciální vlastnost widechar stringů, to potom platí pro jakýkoli prvek jazyka.

5.6.2009 12:39 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Né nebude fungovat, ale chovat se jinak ;-)
5.6.2009 01:17 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Horší než UTF-16? To ani náhodou, abyste vymyslel nepraktičtější typ, to byste se musel hodně snažit… Navíc, jak už podotkl kolega, UTF-8 není určen pro zpracování textu, ale pro jeho ukládání.
5.6.2009 01:51 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
V čem je tedy UTF-8 lepší?

Jasně, UTF-16 má úplně stejné neduhy, jako UTF-8, ale z hlediska zpracování se jedná o tu lepší variantu. Surrogate pair existuje jen jeden a pokud se jedná uložení takového textu v paměti, tak se jedná o celkem dobrou volbu (ono tomu i nasvědčuje to široké použití).

Pokud mluvíme o ukládání textu ve smyslu uložení na HDD, je i UTF-8 můj favorit, ale já jsem mluvil v kontextu uložení textu v paměti aplikace (RAM) a s takovým textem obvykle pracujeme, ne?
5.6.2009 01:57 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Ano UTF-16 je uzasny kompromis. Neni to ani velke ani male, neni to ani rychle ani pomale. Odporuje to standardu (ale jelikoz se vetsinou vlezeme do spodnich 16bit, tak nam to jiste vsichni odpusti).

UTF-32 je urcen pro interni praci s Unicode texty. Cokoliv co opousti aplikaci (at uz libovolnym zpusobem - sit, disk, etc...) by melo byt UTF-8.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
5.6.2009 02:02 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Nevím, proč to tak hrotíte, se chováte, jako by vám snad UTF-16 nějak ublížilo:)

Já nevím, vy tady pořád hlásáte standardy, ale realita je jiná. Pro vás tedy zopakuji ještě jednou, bavím se o reprezentaci řetězců v paměti, nikdy bych se nebavil o wchar v kontextu ukládání textu mimo aplikaci.
5.6.2009 02:49 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Uz zacina byt jasno, bez urazky, ale Ty vubec netusis, ktera bije :)
5.6.2009 09:37 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Co místo těch urážek zkusit nějaký argument?
5.6.2009 20:10 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Nemyslel jsem to tak, jak to nejspíš vyznívá. Omlouvám se.
5.6.2009 09:17 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
V čem je tedy UTF-8 lepší?

Je přímým rozšířením sedmibitové ASCII (může se to hodit např. u webů, jejichž autoři z nějakých důvodů pro informaci o kódování místo hlavičky odpovědi používají berličku v podobě http-equiv meta elementu). Odpadá u něj problém s endianitou, takže není potřeba prznit textové soubory BOM nebo rozlišovat dvě varianty kódování. Je úspornější. Naopak nepřináší oproti UTF-16 žádné nevýhody: zpracováváte-li text v UTF-16, stejně musíte počítat s proměnnou délkou znaku se všemi důsledky (pokud to neděláte jako ta část windowsových programátorů, kteří používají UCS-2 a říkají mu UTF-16).

Pokud mluvíme o ukládání textu ve smyslu uložení na HDD, je i UTF-8 můj favorit, ale já jsem mluvil v kontextu uložení textu v paměti aplikace (RAM) a s takovým textem obvykle pracujeme, ne?

Co se týká zpracování, pak pro jednodušší operace to lze nechat v UTF-8 (převodem do UTF-16 nic nezískáte), pro složitější preferuji typ wchar_t a funkce pro práci s ním tak, jak je definuje ISO C99. Což v podstatě znamená UCS-4 (případně máme-li jistotu, že to bude stačit, lze uvažovat i o UCS-2).

Podstatou celé debaty je ale skutečnost, že pokud autoři MSVC dnes, v roce 2009, pořád ještě nejsou schopni (nebo ochotni) korektně implementovat práci s widechar stringy podle ISO C99, je to trestuhodné. Bohužel v případě MS je takový přístup spíš pravidlem než výjimkou.

5.6.2009 02:43 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf

Standard vyzaduje platnost: jeden wchar_t = jeden znak

Ktery standard? V C99 to zhruba takhle je, ale takhle to tam nestoji. Necham se presvecit konkretnim prikladem se zduvodnenim.

Veskere funkce z GCC tohle celkem logicky predpokladaji.

GCC je to povetsinou jedno a tam kde neni, tam by se mel drzet v mantinelech standardu. V tom neni problem (jak se to vezme, k tomu nejspis dojdeme).

5.6.2009 09:35 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf

Co třeba sekce 7.17?

wchar_t
which is an integer type whose range of values can represent distinct codes for all members of the largest extended character set specified among the supported locales; the null character shall have the code value zero.

Nebo 7.1.1:

1 … The term multibyte string is sometimes used instead to emphasize special processing given to multibyte characters contained in the string or to avoid confusion with a wide string. …

A wide string is a contiguous sequence of wide characters terminated by and including the first null wide character. A pointer to a wide string is a pointer to its initial (lowest addressed) wide character. The length of a wide string is the number of wide characters preceding the null wide character and the value of a wide string is the sequence of code values of the contained wide characters, in order.

5.6.2009 16:58 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
which is an integer type whose range of values can represent distinct codes for all members of the largest extended character set specified among the supported locales

Ano, jak jsem napsal - V C99 to zhruba takhle je, ale takhle to tam nestoji. Proto bych rad konkretni priklad dokazujici ten rozpor se standardem. Rad se necham presvedcit.
5.6.2009 18:17 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
A ne tedy jen v C99, v C++ taky.
5.6.2009 19:21 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Podle mne je ten rozpor zcela zřetelný: implementace ve Windows se tváří, že podporuje i jiné locales než ta, která vystačí s tou částí Unicode, kterou lze v UTF-16 zapsat dvěma byty. K čemu by podle vás bylo implementovat widestringy způsobem, který by si ponechal všechny špatné vlastnosti multibyte stringů a jen přidal pár dalších?
5.6.2009 20:31 Deleted [8409] | skóre: 14 | blog: darkblog
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Zpětná kompatibilita. Ve Windows už si prostě nemůžou říct, že by byl lepší 32 bit wide string.
6.6.2009 11:34 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
To je právě ten průšvih. Teoreticky by program měl být psán tak, aby mu nevadilo, pokud by tvůrce kompilátoru v náhlém zatmění mysli zadefinoval wchar_t třeba jako 64-bitový. Ale teorie a praxe se často dost liší… Holt si asi musíme zvyknout, že programátoři na Windows teprve teď se zpožděním nějakých čtyř let prožívají rozšiřování obzorů související s přechodem na 64-bitovou platformu. Snad se jim časem rozšíří natolik, že budou schopni vstřebat i širší široké znaky. :-)
5.6.2009 21:46 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Uz to chapu. Veril jsem v kompaktni ulozeni omezeneho vyberu znaku, ale to Windows nedelaji. Jsem zase o kousek chyrejsi :)
5.6.2009 13:50 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
GCC je to povetsinou jedno a tam kde neni, tam by se mel drzet v mantinelech standardu. V tom neni problem (jak se to vezme, k tomu nejspis dojdeme).
Coze? Jak ti proboha muze byt u wide retezcu jedno jestli pouzivaji variabilni nebo fixni kodovani?
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
5.6.2009 17:58 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Mluvil jsem o prekladaci. Vetsinu casu je to pro nej jen anonymni kousek pameti a v ostatnich pripadech by mel s obsahem pracovat, tak jak mu dovoluje standard.

Pokud jde o me, tak je mi opravdu jedno v jakem kodovani je wchar_t. Tedy, nekteremu bych jiste dal prednost, ale protoze je to zkratka vec specificka pro prekladac, tak konkretni kodovani nepredpokladam a tam, kde ho potrebuju, pouziju k tomu urcene konverzni funkce.

Nekompatibilita tady je a standard ji v jistych mezich dovoluje. Pokud existuje dukaz tveho tvrzeni, ze Windows v tomto ohledu ten standard porusuji, tak bych ho rad videl.
5.6.2009 18:10 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Ty mas nejakou nervovou poruchu? Na muj prispevek, ze veskere funkce pro praci s wide retezci je pro kompatibilitu s Windows (diky tomu ze ve Windows neplati jeden znak = jeden wchar_t) nutne prepsat zareagujes tim, ze nic prepisovat neni nutne a ted zase reagujes naprosto mimo to o cem se tady bavime.

Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
5.6.2009 19:51 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Mas pravdu, tu cast jsem opravdu pochopil jinak, nez jsi ji myslel. Ale tu vubec neresim, predevsim jsem se ptal s jakym standardem jsou v tomto ohledu ty Windows v rozporu.

Na to jsi prisel s rovnici a ja se pidil po tom, ktery standard toto vyzaduje, jestli vyzaduje presne toto, jak se to tyka toho porusovani a po prikladu, ktery potvrdi jeho porusovani na strane Windows. Zminku o GCC jsem uzavrel s tim, ze v nem neni problem. Prekladac sam o sobe je OK, interoperabilitu, reimplementaci cehokoliv neresim, patram jen po tom porusovani standardu.

Citujes to, co jsem napsal k GCC, tak vysvetluju, ze jsem myslel opravdu jen holy prekladac, odpovidam na dotaz o mem vztahu ke kodovani a dale se snazim jasne vymezit, na co se to vlastne ptam - co a jak je porusovano.

Dekuji za optani, nervovou poruchu nemam, neodbocuju a stale se ptam na jedinou vec, ale asi se spatne vyjadruju (casto). Ted uz by snad melo byt jasno. Cili - jaky standard a jak porusuji Windows (resp. prekladac pouzity k jejich buildu) svou implementaci wchar_t ? Z toho, co vim, si totiz toto nemyslim a prosil bych tedy o konkretni priklad a zduvodneni. Diky.
5.6.2009 20:26 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Achjo, ale vzdyt tohle uz napsal nekdo nade mnou. Kdyz uz nic, tohle ve windows neplati:
A wide string is a contiguous sequence of wide characters terminated by and including the first null wide character. A pointer to a wide string is a pointer to its initial (lowest addressed) wide character. The length of a wide string is the number of wide characters preceding the null wide character and the value of a wide string is the sequence of code values of the contained wide characters, in order.
Je jedno kterym smerem se na to divas. Budto neplati ze string je sekvence wide characters, nebo neplati to ze delka je jejich pocet.

Take porusuje pozadavek na to ze wchar_t ma byt schopen pojmout vsechny znaky vsech locale dostupnych na danem systemu.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
5.6.2009 20:30 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Aby opet nedoslo k nedorozumeni tak:
wide character
bit representation that fits in an object of type wchar_t, capable of representing any character in the current locale
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
5.6.2009 21:35 luky
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Asi uz to chapu. Takze se to do tech dvou bytu proste nevejde. Myslel jsem si, ze by to mohlo byt ve stylu DBCS. Mohl jsem opak tusit uz ze zminky o UTF-16, ale to se pouziva(lo) tak nejak divoce.

Tak dik a sorry, ze jsem tak dlouho prudil :)
4.6.2009 20:08 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
MSVC je sice hrozny kompilator, ale pokud mas standardni kod, tak to vetsinou sezere.

To preto mám v projekte:
#if defined(WIN32)
#define recv(s,b,l,f) recv(s,(char *)b,l,f)
#define setsockopt(s,l,o,v,n) setsockopt(s, l, o,(char *)v, n)
#define getsockopt(s,l,o,v,n) getsockopt(s, l, o,(char *)v, n)
#define strcasecmp _stricmp
#define strncasecmp _strnicmp
#define vsnprintf _vsnprintf
#define snprintf _snprintf
#define assert(b) _ASSERT(b)
#define u_int32_t     DWORD
#define u_int16_t     WORD
#define u_int64_t     unsigned __int64
#define inline __inline
#endif
Plus formátovacie pole pre printf a 64-bitový integer, ne-posix-ové thready, chýbajúce geteuid/getegid, donedávna odlišné argumenty pre niektoré z rodiny printf funkcií, dokonca nedávno kolegom objavená vtipná vec: rôzny počet argumentov pre nejakú printf funkciu v Debug a v Release builde, ... Vlastne ten kompilátor je možno fajn. Len z tej omáčky okolo mi občas idú vlasy dupkom.

Hello! My name is Arjun Bijanki, and I’m the test lead for the Visual C++ compiler. I’m also Microsoft’s representative on the ISO C standard committee. ... Now, the Visual C++ compiler team receives the occasionally question as to why we haven’t implemented C99. It’s really based on interest from our users.

I rest my case.
4.6.2009 21:18 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Slova vetsinou a standardni si pri cteni te vety asi preskocil co? :-D

Ale ano, podpora pro Cecko je na hrozne urovni.
Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
4.6.2009 12:26 Dušan Renát | skóre: 4
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Tohle pravděpodobně pomohlo - tuhle chybu už to nehlásí. Místo toho to hlásí
C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:(.tex
t+0x104): undefined reference to `WinMain@16'
Ano, mám tam funkci main, a to ve formátu
int main(int argc, char * argv[])
Zkoušel jsem i -mwindows přepínač při linkování i překladu (někde jsem to vygooglil) a nic.
4.6.2009 12:58 potejo
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf

Moment on je to ceckovy program nebo c++ zkusil bych mozna prejmenovat main.c na main.cpp ikdyz mozna je to blbost jak od teho vypada makefile?

4.6.2009 13:16 Dušan Renát | skóre: 4
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
V tomhle tématu pokračuju jinde, aby když to pak někdo bude hledat, aby to snáz našel. Protože si myslím, že tenhle problém s původním moc nesouvisí.
4.6.2009 11:46 potejo
Rozbalit Rozbalit vše Re: Přenositelnost C++ z Linuxu na Windows - ::swprintf
Odpovědět | | Sbalit | Link | Blokovat | Admin

Toto uz je mimo ale mozna bys upotrebil novejsi verze gcc http://tdragon.net/recentgcc/ Ale zmineny problem to neresi.

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.