VS 2008 neočekávané výjimky – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

VS 2008 neočekávané výjimky – C / C++ – Fórum – Programujte.comVS 2008 neočekávané výjimky – C / C++ – Fórum – Programujte.com

 

vdolek0
Newbie
21. 9. 2009   #1
-
0
-

Učím se c++ a pokud tomu rozumím dobře, tak neočekávaná výjimka nastane pokud funkce vyvolá výjimku a přitom ji nemá ve své specifikaci. Funkcí std::set_unexpected mohu nastavit jaká fukce se bude volat při neočekávané výjimce. Zkoušel jsem takovýto čistě testovací (jinak neaprosto nepoužitelný) kód:



#include <iostream>
#include <exception>
#include <cstdlib>

void myTerminate()
{
std::cerr << "myTerminate\n";
std::cin.get();
std::exit(-1);
}

void myUnexpected()
{
std::cerr << "myUnexpected\n";
std::cin.get();
std::exit(-1);
}

void fce() throw(std::out_of_range)
{
throw std::string("chyba");
}

int main()
{
std::set_terminate(myTerminate);
std::set_unexpected(myUnexpected);

std::cout << "Pred throw.\n";
std::cin.get();

try
{
fce();
}
catch (std::out_of_range e)
{
std::cerr << "catch (std::out_of_range e)\n";
}
catch (...)
{
std::cerr << "catch (...)\n";
}

std::cout << "Za throw";
std::cin.get();
}


Podle mě, by program měl narazit na neočekávanou výjimku a vypsat:


Pred throw
myUnexpected


Toto mi funguje ve C++ Builderu, ale ve MS Visual Studiu 2008 mi to vypíše tohle:


Pred throw
catch (...)
za throw


Přijde mi to jako, že VS2008 nemá vůbec implementové specifikace výjimek u funkcí, a nezjistí tedy neočkávanou výjimku (bere ji jako normální výjimku, kterou zpracují handlery catch).

Nahlásit jako SPAM
IP: 213.220.248.–
dannyk0
Věrný člen
21. 9. 2009   #2
-
0
-

No jiste, protoze timhle



catch (...)

odchytavas veskere unhandled vyjimky. Tim padem se potlaci puvodni nastaveni.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
ondra.holub+1
Stálý člen
21. 9. 2009   #3
-
0
-

Učím se c++ a pokud tomu rozumím dobře, tak neočekávaná výjimka nastane pokud funkce vyvolá výjimku a přitom ji nemá ve své specifikaci.



Nevím, jak je na tom VS 2008, ale VS toto nepodporovalo. Tedy, té deklaraci rozumělo, ale přímo to vypisovalo warning, že tato specifikace není podporována a bere se to stejně, jako by tam žádná výjimka specifikovaná nebyla. Tedy jinými slovy: VS bere jenom funkci bez specifikace výjimky nebo s prázdným throw.

Nahlásit jako SPAM
IP: 89.203.160.–
vdolek0
Newbie
22. 9. 2009   #4
-
0
-

To dannyk : Tim to nebude, když odstraním catch (...), tak to furt delá něco jiného, než by mělo.

To ondra.holub : Díky moc, myslel jsem si, že to bude chyba VS, protože, jak jsem psal, v C++ Builderu mi to fungovalo.

Nahlásit jako SPAM
IP: 80.250.14.–
dannyk0
Věrný člen
22. 9. 2009   #5
-
0
-

Aha, tak pak jsem se sekl, ale podle kodu mi to prislo logicke. Asi to bude tak, jak pise ondra.holub.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý