Ho le funzioni C++ che voglio dichiarare usando extern "C"
anche se sono chiamate solo in codice C++. Sì, so che è strano ma è qualcosa che vorrei fare per coerenza dal momento che abbiamo mescolato dichiarazioni C e C++. Voglio solo assicurarmi che dichiarare una funzione C++ come extern "C"
non influenzi il comportamento del lancio.Le funzioni C++ possono essere contrassegnate come lancio "C" di Extern?
Sarebbe sembrare qualcosa di simile:
extern "C" void foo() {throw exception;}
int bar()
{
try
{
foo();
} catch (exception e) { return 1; }
}
[domanda correlata] (http://stackoverflow.com/questions/4695741/is-there-a-gcc-option-to-assume-all-extern-c-functions-cannot-propagate-except). –
Le risposte affermano che si sta invocando un comportamento non definito se un'eccezione viene generata dal codice C++ nell'effettivo codice C (che non saprebbe cosa fare con un'eccezione). Penso che sia corretto, ma stai chiedendo di chiamare le funzioni "extern" C "' da C++ o da C?Se li chiami da C++ (e mai da C), c'è l'inevitabile domanda "perché le funzioni 'extern" C "' se non vengono mai chiamate da un'altra lingua? ", Ma penso che semplicemente chiamano le funzioni C++ con 'extern" C "' da C++ significa che non vi è alcun confine linguistico attraversato e quindi nessun comportamento indefinito. –
Grazie a tutti coloro che hanno contribuito a rispondere a questo. Se ho capito bene, la risposta definitiva alla mia domanda era questa: la "C" esterna non cambia il modo in cui viene gestita un'eccezione. Tuttavia, lanciare un'eccezione che non viene catturata e attraversa i limiti del linguaggio ha un comportamento indefinito. –