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
Codice PHP:
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:
Codice PHP:
//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;
}
Codice PHP:
//file x.c
void lancia();
void x(){
lancia();
}
Qualcuno vuole fare una prova?