Article View: pl.comp.lang.c
Article #796Re: Obsluga wyjatkow?
From: Michal Malecki
Date: Mon, 26 Jan 1998 13:39
Date: Mon, 26 Jan 1998 13:39
47 lines
2837 bytes
2837 bytes
Mikolaj Rydzewski <mrydzews@infoserv.ii.uj.edu.pl> wrote:
: Czesc!
: Mam pewien problem zwiazany z obsluga wyjatkow w C++. Chcialem sobie
: przechwycic wyjatek dzielenia przez zero i nic z tego nie wyniklo - tzn.
: wyniklo, ale przerwanie programu, a nie przechwycenie wyjatku. Jeszcze
: gorzej bylo z odwolaniem sie do pustego wskaznika. Testowalem to na c++ pod
: Linuxem i SunOS'em oraz na Visual C++ 4.0
: try
: { int x, y=0;
: x=x/y;
: }
: catch(...)
: { cout << "catch!" << endl;
: }
: A moze kod jest zly?
Alez wlasnie od tego kod musi byc zly, zeby wyjatek sie przechwycil :-).
Niestety, to trzeba stwierdzic, ze wyjatki sa na tyle nowym mechanizmem, ze
nie posiadaja jeszcze ani stdandaryzacji, ani implementacji. Oznacza to,
ze albo sam sobie porzucasz wyjatkami, albo lapal bedziesz najwyzej motyle.
Jezeli chodzi o standartowe rzeczy, to wyjasniam - przylaczajac sie do
wypowiedzi mojego poprzednika - ze standartowo pod UNIX'em mamy do dyspozycji
jedynie sygnaly. Po odwolaniu sie do pustego wskaznika zglosi sie SIGSEGV.
Przy dzieleniu przez zero - SIGFPE (co prawda nazwa sugeruje Floating-Point,
ale jest zglaszany przy wszelkich bledach matematycznych). Oczywiscie jest to
jedyny sygnal zglaszany przy operacjach na liczbach calkowitych (przepelnienia
i przeniesienia sa ignorowane).
Jest sporo mechanizmow do obslugiwania sygnalow. Oczywiscie wyjatki maja duza
przewage, przede wszystkim dlatego, ze mozna w nich zawrzec pewne informacje,
a takze, ze ulegaja propagacji. Niestety nie sa jak na razie stosowane przez
standartowe biblioteki. Dla mnie byloby duzym ustepstwem, gdyby zamiast SIGSEGV
zglaszal sie odpowiedni wyjatek (z odpowiednia informacja, ktora moglbym
zrzucic do core'a). Niestety, na to bedziemy musieli poczekac.
Za slowami kolegi, polecam:
1. man -a signal // informacje o funkcjach
2. cat /usr/include/sys/signal.h // rodzaje sygnalow
--
.---. . . - Michal Malecki <mmalecki@technologist.com>/The things that
\___ ,-. | , |- ,-. ,- mUd: zly.mud.org.pl 4000. /can't destroy you
\ |-' |< | | | | uRl: www.kis.p.lodz.pl/~sektor /make you
`---' `-' ' ` `' `-' ' pGp: sektor@zly.kis.p.lodz.pl /stronger...
Technical Details
Message-ID:
<6ai3lt$npt@polonez.man.lodz.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uucp-gw.cyf.gov.pl!news.memax.krakow.pl!news.task.gda.pl!news.man.lodz.pl!not-for-mailReferences:
<6a1vod$noc$1@info.cyf-kr.edu.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!uucp-gw.cyf.gov.pl!news.memax.krakow.pl!news.task.gda.pl!news.man.lodz.pl!not-for-mail From: Michal Malecki <sektor@zly.kis.p.lodz.pl> Newsgroups: pl.comp.lang.c Subject: Re: Obsluga wyjatkow? Date: 26 Jan 1998 13:39:09 GMT Lines: 47 Message-ID: <6ai3lt$npt@polonez.man.lodz.pl> References: <6a1vod$noc$1@info.cyf-kr.edu.pl> NNTP-Posting-Host: sektor@zly.kis.p.lodz.pl User-Agent: tin/pre-1.4-980105 (UNIX) (SunOS/5.5.1 (i86pc)) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit