Hay ocasiones en las que es necesario mezclar el código C y C++. Por ejemplo, al usar un código C heredado o al usar una biblioteca C específica, proporciona a su código C++ alguna funcionalidad específica. Por lo tanto, se deben tener en cuenta algunos pasos especiales cuando se usa código C en un archivo C++ o viceversa.
Este artículo, a través de algunos ejemplos, analiza los pasos necesarios para mezclar código C/C++.
1. Llamar funciones C desde C++
En esta sección discutiremos cómo llamar a funciones C desde código C++.
Aquí está el código C (Cfile.c):
#include <stdio.h> void f(void) { printf("\n This is a C code\n"); }
El primer paso es crear una biblioteca de este código C. Los siguientes pasos crean una biblioteca compartida:
$ gcc -c -Wall -Werror -fPIC Cfile.c $ gcc -shared -o libCfile.so Cfile.o
La biblioteca compartida libCfile.so se produce como resultado de los dos comandos anteriores.
Aquí está el código principal de C++ (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 función C f() se declara dentro de la notación externa "C" para decirle al compilador cpp que tiene un enlace de tipo C.
Ahora, compile el código (asegúrese de que la biblioteca compartida libCfile.so esté vinculada al código):
$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile
Antes de ejecutar el ejecutable, asegúrese de que la ruta de la biblioteca compartida esté contenida en la variable de entorno LD_LIBRARY_PATH.
$ export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Ahora ejecute el ejecutable 'main':
$ ./main This is a C code being used within C++ code
Entonces vemos que una función C fue llamada con éxito desde un código C++.
Además, lea esto para obtener información detallada sobre cómo crear bibliotecas compartidas en Linux.
2. Llamar funciones de C++ desde C
En esta sección discutiremos cómo llamar a funciones C++ desde código C.
Aquí hay un código C++ (CPPfile.cpp):
#include <iostream> void func(void) { std::cout<<"\n This is a C++ code\n"; }
Veremos cómo se puede llamar a la función func() desde un código C.
El primer paso para esto es cambiar la declaración/definición de esta función introduciendo la notación extern “C”.
#include <iostream> extern "C" void func(void) { std::cout<<"\n This is a C++ code\n"; }
El siguiente paso es crear una biblioteca a partir del código anterior. Los siguientes pasos crean una biblioteca compartida:
g++ -c -Wall -Werror -fPIC CPPfile.cpp $ g++ -shared -o libCPPfile.so CPPfile.o
Los comandos anteriores deberían dar como resultado la biblioteca compartida libCPPfile.so.
Aquí está el código principal en lenguaje 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; }
Tenga en cuenta que la función C++ se declara como externa aquí.
Compile el código C (main.c) así:
gcc -L/home/himanshu/practice/ -Wall main.c -o main -lCPPfile
y agregue la ruta del directorio actual a la variable de entorno LD_LIBRARY _PATH
export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH
Ahora ejecute el ejecutable 'main':
$ ./main This is a C++ code being used within C code
El resultado anterior muestra que la función C++ se llamó con éxito desde el código C.