PDA

View Full Version : [C++]Eccezione non catturata da gcc ma catturata da mingw: bug del gcc?


anx721
17-02-2005, 22:21
Ho questo esempio:

ho un file c++ in cui c'è una funzione

void lancia();

che lancia un'eccezione; un file C con una funzione x(); che invoca lancia(). Il file C è compilato con gcc, il file cpp con g++ e poi linko tutto con g++.

se eseguo x() all'interno di un blocco try/cacth


try{
x();
}
catch(int e){
cout << "\n\neccezioen catturata";
}


l'eccezione non viene catturata se compilo il programma con gcc/g++ di linux (3.3.2), mentre viene catturata se lo compilo con minwg 3.3.1 su windows. La cosa ancora piu strana è che se compilo con g++ anche il file C allora l'eccezione viene catturata anche su linux.

Come mai? E' un bug di gcc?

Ecco il programma:


//file y.cpp

#include <iostream>

using namespace std;

extern "C" void lancia(){
throw 1;
}

extern "C" void x();

int main(){
try{
x();
}
catch(int e){
cout << "\n\neccezioen catturata";
}
cout << "\n\ncontinuo";
return 0;
}



//file x.c

void lancia();

void x(){
lancia();
}


Qualcuno vuole fare una prova?

ilsensine
18-02-2005, 09:00
Il file c compilato con gcc deve essere compilato con il flag -fexceptions. Il comportamento strano è quello sotto windows: la gestione delle eccezioni negli oggetti c non dovrebbe essere abilitata di default.

anx721
18-02-2005, 11:03
Originariamente inviato da ilsensine
Il file c compilato con gcc deve essere compilato con il flag -fexceptions. Il comportamento strano è quello sotto windows: la gestione delle eccezioni negli oggetti c non dovrebbe essere abilitata di default.


è vero grazie ;)

ilsensine
18-02-2005, 11:48
Prova C-CodeTracer ;)

<OT> Posso impicciarmi e chiederti una curiosità?
Hai scritto questo programma e lo distribuisci senza porre limiti all'utilizzo (ovvero: non ne vendi in parallelo una versione "commerciale"). Come mai tanta gelosia sul suo codice sorgente?
Solo una curiosità

anx721
18-02-2005, 11:52
Originariamente inviato da ilsensine
<OT> Posso impicciarmi e chiederti una curiosità?
Hai scritto questo programma e lo distribuisci senza porre limiti all'utilizzo (ovvero: non ne vendi in parallelo una versione "commerciale"). Come mai tanta gelosia sul suo codice sorgente?
Solo una curiosità

Appena mi laureo dò pure il codice perche fa parte della mia tesi.

ilsensine
18-02-2005, 11:55
Ah non avevo capito che riguardava una tesi :)