Otßzky a odpov∞di


V tΘto Φßsti budou zv∞°ejn∞ny vaÜe dotazy a jß na n∞ zde odpovφm. Tak si budou moci odpov∞∩ p°eΦφst vÜichni zßjemci a ne pouze tazatel. Dotazy ke Kurzu C/C++ posφlejte na email mΘho kolegy: andrei.badea@centrum.cz a dotazy ke kurzu o DirectX posφlejte na m∙j email: jiri.formanek@centrum.cz.

1. Existuje n∞jakΘ freeware v²vojovΘ prost°edφ pro jazyk C/C++ a kde jej mohu zφskat?
Ano, existuje Dev-C++ 3.8 a stßhnout si ho m∙₧ete na tΘto adrese: www.bloodshed.nu. Prost°edφ bylo za°azeno na ChipCD 11/2001.

2. Bude nejaky serißl o DirectShow?
Nebude. Po DirectDraw bych cht∞l pokraΦovat komponentou DirectInput a pak jeÜt∞ nevφm, ale DirectShow to nebude.

3. Bude plynul² p°echod z C++ na C#?
Snad ano. C# mß b²t n∞co mezi Visual Basicem a Visual C++, tak₧e prost°edφ bude z°ejm∞ "p°ßtelÜt∞jÜφ", ale stßle se bude pou₧φvat jazyk C++.

4. Mßm n∞jakou t°φdu (nap°φklad CMujEdit zd∞d∞n² od CEdit) a mßm ji zobrazenu v panelu ClassView. ObΦas se stane nßsledujφcφ v∞c, kterΘ nerozumφm: p°idßm t°φd∞ pomocφ polo₧ky kontextoveho menu "Add Windows Message Handler" n∞jakou oblu₧nou funkci, pak se mi nelφbφ co d∞lß a jß ji chci odstranit. Pokud ji sma₧u ruΦn∞ p°φmo v k≤du, stejn∞ jako odkaz na nφ v map∞ zprßv a v hlaviΦkovΘm souboru, je vÜe v po°ßdku. Pokud vÜak kliknu v ClassView u p°φsluÜnΘ metody na Delete a potvrdφm, ₧e se majφ odkazy smazat a t∞lo metody zakomentovat, pak se n∞kdy stane, ₧e mi celß t°φda zmizφ z ClassView a zp∞t se mi objevi teprve potΘ, co pomoci ClassWizardu znovu p°idßm smazanou metodu. Kdy₧ ji nßsledn∞ vyma₧u "ruΦn∞", je vÜe v po°ßdku. ╚φm to je zp∙sobeno?
ClassView nenφ dokonalΘ. Pokud vyma₧ete kousek klφΦovΘho slova "class", tak t°φda z ClassView zmizφ a to je v po°ßdku, proto₧e v²vojovΘ prost°edφ tuto t°φdu nenajde, ale obΦas se stane, ₧e t°φda zmizφ p°i normalnφ operaci s t°φdou jako je nap°φklad p°idßvßnφ a mazßnφ funkcφ. Toto je chyba samotneho v²vojovΘho prost°edφ a ani nejnov∞jÜφ SP5 (Service Pack 5.0) tuto chybu neopravuje. Pokud se vßm stane, ₧e t°φda zmizφ, pokuste se vratit krok, po kterΘm t°φda zmizela a poslΘze ho prove∩te znovu. Pokud nejde krok vrßtit, musφte bu∩to Φekat a₧ se jednoho krßsnΘho dne t°φda znovu objevφ nebo by m∞lo staΦit vyjmout a zase p°idat hlaviΦkov² i implementaΦnφ soubor, ve kterΘm je t°φda. Zkuste restartovat VC++ i cely poΦφtaΦ a poslednφ mo₧nost je, ₧e vyma₧ete soubory s p°φponami .ncb a .opt v adresß°i vaÜeho projektu. To jsou soubory, ve kter²ch je ulo₧ena prßv∞ struktura ClassView a vy tak p°inutφte VC++, aby ji znovu vytvo°ilo.

DalÜφ znßm² bug: Zkuste zm∞nit jazyk vφce zdroj∙ najednou (v ResourceView) a prost°edφ rovn∞₧ spadne.

5. Existuje Φesky psanß kniha o DirectX?
Bohu₧el jsem o takovΘ publikaci neslyÜel. V angliΦtin∞ je takov²ch knih n∞kolik (viz. www.microsoft.com).

6. Lze zm∞nit nastavenφ ji₧ rozpracovanΘho projektu na statickΘ linkovanφ MFC, ani₧ bych musel projekt znovu zavßd∞t?
Samoz°ejm∞. V menu Project zvolte polo₧ku Settings. Tam hned na prvnφ kart∞ najdete zp∙sob linkovanφ. Dßvejte si ale pozor na to, ze konfigurace projektu je rozd∞lena pro Release a Debug re₧im. Musφte ji nastavit nejlΘpe pro oba re₧imy, ale hlavn∞ pro Release, proto₧e tuto verzi pak distribuujete.

7.Na zßklad∞ vaÜeho kurzu jsem se zaΦal uΦit programovacφ jazyk C, za pou₧itφ knihy "UΦebnice jazyka C 1.". Mßm vÜak problΘm: v₧dy kdy₧ zkompiluji sv∙j program, ten se zpustφ,ale po provedenφ vÜech p°φkaz∙ se ihned ukonΦφ a jß nejsem schopen zkontrolovat sprßvnost v²poΦt∙ na obrazovce. Po zkuÜenostech s Pascalem jsem hledal v knize n∞jak² p°φkaz podobn² READKEY, ale nic takovΘho jsem nenaÜel. Mß jazyk C n∞jak² podobn² p°φkaz? Nebo je chyba v mΘm kompileru?
Chyba to nenφ. Program prost∞ skonΦφ a v²stupnφ okno se zav°e. Pokud je v²poΦet programu rychl², Φlov∞k post°ehne jen probliknutφ. ┌pln² ekvivalent funkci READKEY z Pascalu v C nenajdete, ale m∙₧ete pou₧φt funkci getchar(), kterß funguje podobn∞ (navφc vracφ ordinßlnφ Φφslo stisknutΘho znaku). Abyste mohli tuto funkci pou₧φt, musφte vlo₧it hlaviΦkov² soubor stdio.h.

7.Pou₧φvß se v C++ v deklaraci prom∞nnΘ slovo var, co to var znamenß?
Nepou₧φvß. KlφΦovΘ slovo var se pou₧φvß v Pascalu k deklaraci prom∞nn²ch a k p°edßvßnφ parametr∙ funkcφm odkazem. Jinak var je od slova variable, co₧ je prom∞nnß.

8. Je lepÜφ Java nebo C++, a v Φem?
Nedß se °φci, jestli je lepÜφ Java nebo C++. Za prvΘ, ka₧d² jazyk mß svΘ p°ednosti a svΘ nev²hody. Za druhΘ se jednß o dva r∙znΘ typy programovacφch jazyk∙. I kdy₧ je syntaxe velice podobnß, C++ je jazyk kompilovan² tzn. ₧e program se jednou p°elo₧φ a pak u₧ se jen spouÜtφ. Ale Java je jazyk interpretovan² tzn. ₧e se k≤d p°eklßdß p°i ka₧dΘm spuÜt∞nφ. Proto takΘ C++ nemß sv∙j skriptovacφ jazyk (znßme JavaScript, VBScript, ale C++Script nikoliv:-)). Tak₧e by se dalo °φci, ₧e program v C++ bude v₧dy rychlejÜφ ne₧ stejn² program v Jav∞, ale takΘ to zßle₧φ na mnoha dalÜφch okolnostech.

9. Mohl byste mi vysv∞tlit rozdφl mezi ukazatelem a normßlnφ prom∞nnou? ProΦ n∞kterΘ funkce cht∞jφ jako parametry ukazatele a jinΘ normßlnφ prom∞nnou?
VÜimn∞te si, ₧e nap°. funkce SelectObject() bere jako parametr ukazatel na objekt. Kdy₧ se funkci p°edßvß parametr hodnotou (to znamenß jako normßlnφ prom∞nnou bez hv∞zdiΦky), ud∞lß se kopie p°edßvanΘho objektu na zßsobnφku (stacku). Kdy₧ se jednß o objekt, musφ se ud∞lat kompletnφ kopie, vÜechny prom∞nnΘ! P°edstavte si, ₧e objekt bude mφt 20 prom∞nn²ch a navφc m∙₧e obsahovat dalÜφ objekty û to jist∞ uznßte, ₧e je znaΦn∞ neefektivnφ, kdy₧ pak tuto kopii stejn∞ zahodφte. Mnohem lepÜφ je, kdy₧ p°edßte pouze ukazatel. Tak₧e obecn∞ platφ, ₧e kdy₧ p°edßvßte objekty je lepÜφ pou₧φvat ukazatele, i kdy₧ nechcete objekt uvnit° funkce m∞nit. Naopak u b∞₧n²ch typ∙ se p°edßvß hodnota, samoz°ejm∞ pokud chcete hodnotu prom∞nnΘ ve funkci m∞nit, musφte p°edat bu∩ ukazatel nebo referenci.

10. Co je to HANDLE a k Φemu se pou₧φvß?
HANDLE je ukazatel na ukazatel, Φili prom∞nnß, kterß obsahuje adresu na jinou prom∞nnou, kterß obsahuje adresu naÜeho objektu. A proΦ se nepou₧φvß jednoduch² ukazatel? Windows si Φasto p°esouvß bloky v pam∞ti (uvol≥ovßnφ nepot°ebn²ch objekt∙ apod.) a kdybychom m∞li ukazatel p°φmo do tΘto "pohyblivΘ pam∞ti", tak by se nßm mohlo stßt to, ₧e ukazatel p°estane b²t platn², proto₧e objekt byl p°esunut do jinΘ Φßsti pam∞ti. Zatφmco handle ukazuje na stßle stejnΘ mφsto v pam∞ti, se kterou se neh²be. Handle se velice pou₧φvß ve Win32 API (tzn. v programovΘm rozhranφ Windows). Nap°φklad vytvß°φme handle okna, ikon, bitmap apod.