Il y a des moments où il est nécessaire de mélanger le code C et C++ ensemble. Par exemple, lors de l'utilisation d'un code C hérité ou lors de l'utilisation d'une bibliothèque C spécifique, le fournit à votre code C++ certaines fonctionnalités spécifiques. Ainsi, certaines étapes spéciales doivent être suivies lors de l'utilisation de code C dans un fichier C++ ou vice versa.
Cet article, à travers quelques exemples, explique les étapes nécessaires pour mélanger du code C/C++.
1. Appeler des fonctions C depuis C++
Dans cette section, nous verrons comment appeler des fonctions C à partir de code C++.
Voici le code C (Cfile.c):
#include <stdio.h> void f(void) { printf("\n This is a C code\n"); }
La première étape consiste à créer une bibliothèque de ce code C. Les étapes suivantes créent une bibliothèque partagée :
$ gcc -c -Wall -Werror -fPIC Cfile.c $ gcc -shared -o libCfile.so Cfile.o
La bibliothèque partagée libCfile.so est produite à la suite des deux commandes ci-dessus.
Voici le code C++ principal (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 fonction C f() est déclarée dans la notation extern "C" pour indiquer au compilateur cpp qu'elle a une liaison de type C.
Maintenant, compilez le code (assurez-vous que la bibliothèque partagée libCfile.so est liée au code) :
$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile
Avant de lancer l'exécutable, assurez-vous que le chemin de la bibliothèque partagée est contenu dans la variable d'environnement LD_LIBRARY_PATH.
$ export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Lancez maintenant l'exécutable 'main' :
$ ./main This is a C code being used within C++ code
Nous voyons donc qu'une fonction C a été appelée avec succès à partir d'un code C++.
Lisez également ceci pour des informations détaillées sur la création de bibliothèques partagées sous Linux.
2. Appeler des fonctions C++ depuis C
Dans cette section, nous verrons comment appeler des fonctions C++ à partir de code C.
Voici un code C++ (CPPfile.cpp) :
#include <iostream> void func(void) { std::cout<<"\n This is a C++ code\n"; }
Nous allons voir comment la fonction func() peut être appelée depuis un code C.
La première étape pour cela est de changer la déclaration/définition de cette fonction en introduisant la notation extern "C".
#include <iostream> extern "C" void func(void) { std::cout<<"\n This is a C++ code\n"; }
L'étape suivante consiste à créer une bibliothèque à partir du code ci-dessus. Les étapes suivantes créent une bibliothèque partagée :
g++ -c -Wall -Werror -fPIC CPPfile.cpp $ g++ -shared -o libCPPfile.so CPPfile.o
Les commandes ci-dessus doivent aboutir à la bibliothèque partagée libCPPfile.so.
Voici le code principal en langage 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; }
Veuillez noter que la fonction C++ est déclarée comme extern ici.
Compilez le code C (main.c) comme ceci :
gcc -L/home/himanshu/practice/ -Wall main.c -o main -lCPPfile
et ajoutez le chemin du répertoire actuel à la variable d'environnement LD_LIBRARY _PATH
export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Lancez maintenant l'exécutable 'main' :
$ ./main This is a C++ code being used within C code
La sortie ci-dessus montre que la fonction C++ a été appelée avec succès à partir du code C.