Il meccanismo extern "C" fornisce la possibilità di interagire con il codice in linguaggio C. Questo consente di utilizzare librerie C e facilita l'interazione tra C++ e altri linguaggi.
Storia della questione: Fin dall'inizio, il linguaggio C++ è stato costruito sulla base di C, ma aveva le sue peculiarità, inclusa la 'name mangling', per supportare il sovraccarico delle funzioni e altre caratteristiche.
Problema: Il nome di una funzione in C++ viene compilato in un simbolo con una struttura aggiuntiva (mangled), mentre in C non c'è tale trasformazione. Di conseguenza, non è possibile semplicemente collegare l'intestazione del codice C a un compilatore C++ senza sforzi aggiuntivi.
Soluzione:
Involgere le funzioni nella costruzione extern "C" impedisce la 'name mangling', rendendole visibili per il codice compilato dal compilatore C.
Esempio di codice:
#ifdef __cplusplus extern "C" { #endif void foo(int); #ifdef __cplusplus } #endif
Caratteristiche principali:
È possibile sovraccaricare funzioni con extern "C"?
No, il sovraccarico non è possibile poiché viene utilizzato il nome standard C della funzione.
Cosa succede se dichiaro una funzione template come extern "C"?
Errore di compilazione, poiché i template sono una caratteristica separata di C++ e non sono supportati in C.
È possibile utilizzare extern "C" a livello di classe separata?
No, solo per funzioni e variabili, non per classi o metodi.
Un progetto C++ collega una libreria C di terze parti senza extern "C", quindi il codice non si collega a causa della non corrispondenza dei nomi dei simboli.
Vantaggi:
Svantaggi:
Viene utilizzato extern "C" nei file di intestazione durante l'integrazione di librerie C di terze parti.
Vantaggi:
Svantaggi: