Linux a vyjimky v C++

Ing. Miloslav Ponkrác ponkrac na peregrius.cz
Sobota Březen 4 11:53:26 CET 2000


Ivo Zacek napsal:

>Zkusím popsat své zkušenosti.
>
>Šablony: používám je už dlouho, ale jen dost jednoduchým způsobem (a
>když jsem někdy zjistil, že něco chodí jinak než podle mých představ,
>tak jsem se tomu vyhnul). Vím, že dřív byly nějaké problémy s STL, která
>je na šablony dost náročná. Teď už snad nejsou. Je to zrovna pár dnů, co
>jsem STL použil v jednom jednodušším programu, a zatím mi to chodí.


Dekuji, pokud chodi STL, tak alespon trochu sablony chodit musi. Na druhe
strane je STL docela dost "laditelna", tedy umi se nastavit na nejruzneji
blbe kompilatory. Nevim, jak je to u Linuxu, ale v C++ Builderu pod Windows
je hlavickovy soubor stdcomp.h, ktery umoznuje nastavit radove desitky
ruznych omezeni kompilatoru. Teda treba to, ze kompilator neco neumi, apod.
Je jasne, ze ale nutnou podminkou je alespon zakladni podpora templates u
kompilatoru. Jinak receno, to ze chodi STL neznamena, ze template jsou
implementovany ve vsech svych aspektech.

>Výjimky: ještě v GCC 2.7.2 to s nimi moc dobře nešlo. Teď mám RH6.1, kde
>je egcs 1.1.2; zjistil jsem, že zde by výjimky mohly jakž takž fungovat
>a začal jsem je celkem bez zábran používat. Zjistil jsem problémy
>(nabouraný zásobník při šíření výjimky), když jsem měl zapnuté nějaké
>optimalizace. Když jsem je vypnul, problémy zmizely. Časem se pokusím
>zjistit, které optimalizace tomu vadí (mám podezření na
>-fomit-frame-pointer). Možná by se o tom dalo něco najít v dokumentaci;
>přiznávám se, že patřím k těm, kteří čtou dokumentaci až jako poslední
>možnost.


U vyjimek je mozna jedna zrada. U nekterych kompilatoru totiz neslo odchytit
vyjimku predkem tridy, tedy neco takoveho:

class predek {};

class potomek : public predek {};

int main()
{
  try {
     throw potomek();
  }
  catch (predek &) {
     printf ("Chytil jsem, vse je O.K.\n");
  }
  catch (...) {
    printf ("Podpora vyjimek za mnoho nestoji\n");
  }

return 0;
};

Jinak receno, pokud tento usek programu neprobehne chycenim vyjimky pomoci
predek, tak sice vyjimky u kompilatoru muzou fungovat, ale je to na houby. A
bohuzel nektere kompilatory takovouto vyjimku nechytnou, jako treba zrovna
DJGPP. Takove kompilatory by radeji mely napsat, ze vyjimky jim nepracuji
tak, jak maji.

>Namespaces: zatím je nepoužívám, takže raději nebudu hlásat bludy.

Ono ani neni moc kompilatoru, ktere je podporuji, takze ani ja na jejich
podpore prilis netrvam. Ale potesi.

Miloslav Ponkrác





Další informace o konferenci Linux