Diskuze: Rozdílné chování na Linuxu a Windows
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
tady by možná stálo za to si do té metody pohnoutSe umístit breakpoint (třeba i podmíněný) a zkusit si opravdu prokrokovat, co se v danou situaci děje. Nevím, jakým způsobem hledáš chyby. V tomhle případě by krokování nemuselo být až tak náročné.
Díval jsem se jen na příslušnou metodu dané třídy, jak jsi ji uvedl ve svém příspěvku. Je samozřejmě možné, že ti někde nějaký ukazatel ukazuje někam, kam nemá, nebo nějaká část tvého programu přpeisuje paměť, kde nemá (tyhle věci se mohou chovat rozdílně na Linuxu a na Windows).
Jinak by bylo dobré, kdybys před uploadem zdrojáků na web odstranil různé dočasné soubory, kterých, jak se mi zdá, tam máš víc než dost.
Jinak svádět vinu na kompilátor je cesta do pekel. Ne že by chyby v překladačích neexistovaly (1-2 měsíce zpátky jsme se s jednou potkali), ale není to moc pravděpodobné. Operační systém ale může tvůj program ovlivňovat i ve věcech, kterých sis nevšiml. Těžko takhle říci. Musel bych prolézat celý zdroják, což se mi, přiznám se, dnes rozhodně nechce.
Děkuji. S těmi ukazateli mívám často problém. Vlastně jsem rád, když mi aplikace nespadne kvůli neoprávněnému přístupu do paměti. Použít breakpointy mě nenapadlo, asi zkusím trochu přehodnotit, jak vyhodnocuji kolize, protože se mi to zdá možná příliš dlouhé a mám pocit, že jsem to už kdysi vyřešil jednodušeji.
No jo, ty dočasné soubory, ty tam nadělal Linux a jelikož jsem to komprimoval na něm, tak jsem je neviděl.
Tak už je to vyřešené. Problém byl v tom, že funkce, která měla vracet true/false, vracela jen true nebo nic. Byla to funkce koliduje ve třídě Mapa.
To je jeden z důvodů, proč ve svém kódu používám Pravidlo jednoho returnu. Pak se mi nemůže stát, že by funkce někdy hodnotu nevracela. Některé překladače dokážou situaci, kdy jedna větev výpočtu ve funkci nevrací žádnou hodnotu (což je nepřesně řečeno, funkce vždy vrací hodnotu, alespoň na rozšířených architekturách), detekovat a ohlásit ji prostřednictvím varování. Nelze to ale detekovat zdaleka vždy.
Jinak, co jsem viděl pár metod tvého kódu, docela často tam máš něco ve smyslu:
if (podminka)
return true;
else return false;
To lze ekvivalentně napsat takto:
return (podminka);
Hodnota podmínky není nic speciálního, jedná se vlatně o logický typ, což v čistém C bude číslo, v C++ už snad existuje něco jako bool.
Returnů mívám ve funkci či metodě klidně i deset. Je to lepší než break.
Aby funkce vždy vracela nějakou hodnotu, stačí na její konec připsat return s nějakou výchozí hodnotou.
Kit: jasně, záleží na každém, jak se mu dobře programuje. Myslím, že u mně jeden return ve funkci snížil výskyt některýc hchyb (spolu s dalšími opatřeními), takže ho používám a mám ho rád. Ale ať si každý programuje, jak chce.
Na druhou stranu chápu, že třeba v Javě se v returnu chyba udělat nedá, ale v C++ je to raz dva. Proto mám v Javě jistotu, že i když těch returnů je 10, tak jsou všechny správně a žádný nechybí.
Zobrazeno 9 zpráv z 9.