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?