GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo llamar a la función C en C++, función C++ en C (Mezclar C y C++)

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.


Linux
  1. ¿Cómo llamar a una función Bash en Bash Script dentro de Awk?

  2. CodeBlocks:un IDE de C, C++ y Fortran gratuito y multiplataforma

  3. Cómo crear y llamar funciones en Bash

  4. Llame a una función C desde el código C++

  5. ¿Cómo encontrar las personas que llaman y el destinatario de una función en código C en vi/vim?

Cómo compilar C, C++ y Java usando Terminal en Linux

Cómo compilar y ejecutar programas C, C++ en Linux

Cómo arreglar la llamada a la función indefinida apc_fetch () – Error fatal de PHP [Resuelto]

Linux:¿cómo verificar que una distribución de Linux sea segura y no tenga código malicioso?

Cómo agregar una clave SSH a VS Code y conectarse a un host

¿Cómo puedo perfilar el código C++ que se ejecuta en Linux?