GNU/Linux >> Tutoriels Linux >  >> Linux

Comment appeler la fonction C en C++, la fonction C++ en C (mélanger C et C++)

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.


Linux
  1. Comment définir et utiliser des fonctions dans Linux Shell Script

  2. Comment réparer l'appel à la fonction non définie apc_fetch() - Erreur fatale PHP [Résolu]

  3. Linux - Comment vérifier qu'une distribution Linux est sécurisée et n'a pas de code malveillant ??

  4. Comment créer des raccourcis clavier de macro et de fonction Linux dans le fichier .intputrc

  5. Comment implémenter un délai d'attente dans l'appel de la fonction de lecture ?

Comment compiler C, C++ et Java à l'aide de Terminal sous Linux

Comment compiler et exécuter des programmes C, C++ sous Linux

Comment ajouter une clé SSH au code VS et se connecter à un hôte

Comment puis-je profiler du code C++ exécuté sous Linux ?

Comment ajouter la fonction d'interrogation au code du module du noyau ?

Comment compiler du code Windows Visual C++ sous Linux