Ci sono momenti in cui è necessario mescolare insieme il codice C e C++. Ad esempio, durante l'utilizzo di un codice C legacy o durante l'utilizzo di una libreria C specifica, il codice C++ fornisce alcune funzionalità specifiche. Pertanto, è necessario prestare attenzione ad alcuni passaggi speciali quando si utilizza il codice C in un file C++ o viceversa.
Questo articolo, attraverso alcuni esempi, illustra i passaggi necessari per combinare codice C/C++.
1. Chiama le funzioni C da C++
In questa sezione discuteremo su come chiamare le funzioni C dal codice C++.
Ecco il codice C (Cfile.c):
#include <stdio.h> void f(void) { printf("\n This is a C code\n"); }
Il primo passaggio consiste nel creare una libreria di questo codice C. I seguenti passaggi creano una libreria condivisa :
$ gcc -c -Wall -Werror -fPIC Cfile.c $ gcc -shared -o libCfile.so Cfile.o
La libreria condivisa libCfile.so viene prodotta come risultato di due comandi precedenti.
Ecco il codice C++ principale (main.cpp):
#include <iostream> extern "C" { void f(); } void func(void) { std::cout<<"\n being used within C++ code\n"; } int main(void) { f(); func(); return 0; }
La funzione C f() viene dichiarata all'interno della notazione esterna "C" per indicare al compilatore cpp che ha un collegamento di tipo C.
Ora, compila il codice (assicurati che la libreria condivisa libCfile.so sia collegata al codice):
$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile
Prima di eseguire l'eseguibile assicurarsi che il percorso della libreria condivisa sia contenuto nella variabile di ambiente LD_LIBRARY_PATH.
$ export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Ora esegui l'eseguibile 'main' :
$ ./main This is a C code being used within C++ code
Quindi vediamo che una funzione C è stata chiamata con successo da un codice C++.
Inoltre, leggi questo per informazioni dettagliate su come creare librerie condivise in Linux.
2. Chiama le funzioni C++ da C
In questa sezione discuteremo su come chiamare le funzioni C++ dal codice C.
Ecco un codice C++ (CPPfile.cpp):
#include <iostream> void func(void) { std::cout<<"\n This is a C++ code\n"; }
Vedremo come la funzione func() può essere chiamata da un codice C.
Il primo passo per questo è cambiare la dichiarazione/definizione di questa funzione introducendo la notazione extern "C".
#include <iostream> extern "C" void func(void) { std::cout<<"\n This is a C++ code\n"; }
Il passaggio successivo consiste nel creare una libreria dal codice sopra. I seguenti passaggi creano una libreria condivisa:
g++ -c -Wall -Werror -fPIC CPPfile.cpp $ g++ -shared -o libCPPfile.so CPPfile.o
I comandi precedenti dovrebbero risultare nella libreria condivisa libCPPfile.so.
Ecco il codice principale in linguaggio C (main.c):
#include <stdio.h> extern void func(void); void f(void) { printf("\n being used within C code\n"); } int main(void) { func(); f(); return 0; }
Si noti che la funzione C++ è dichiarata come extern qui.
Compila il codice C (main.c) in questo modo:
gcc -L/home/himanshu/practice/ -Wall main.c -o main -lCPPfile
e aggiungi il percorso della directory corrente alla variabile di ambiente LD_LIBRARY _PATH
export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Ora esegui l'eseguibile 'main' :
$ ./main This is a C++ code being used within C code
L'output sopra mostra che la funzione C++ è stata chiamata con successo dal codice C.