GNU/Linux >> Znalost Linux >  >> Linux

Jak volat funkci C v C++, funkci C++ v C (Mix C a C++)

Jsou chvíle, kdy je nutné smíchat kód C a C++ dohromady. Například při používání staršího kódu C nebo při používání konkrétní knihovny C poskytuje vašemu kódu C++ některé specifické funkce. Při používání kódu C v souboru C++ nebo naopak je tedy třeba věnovat pozornost některým speciálním krokům.

Tento článek prostřednictvím několika příkladů popisuje kroky potřebné ke smíchání kódu C/C++.

1. Volání funkcí C z C++

V této části probereme, jak volat funkce C z kódu C++.

Zde je kód C (Cfile.c):

#include <stdio.h>

void f(void)
{
    printf("\n This is a C code\n");
}

Prvním krokem je vytvoření knihovny tohoto C kódu. Následující kroky vytvoří sdílenou knihovnu:

$ gcc -c -Wall -Werror -fPIC Cfile.c
$ gcc -shared -o libCfile.so Cfile.o

Sdílená knihovna libCfile.so je vytvořena jako výsledek dvou výše uvedených příkazů.

Zde je hlavní kód 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;
}

C funkce f() je deklarována v notaci extern “C”, aby sdělila kompilátoru cpp, že má vazbu typu C.

Nyní zkompilujte kód (ujistěte se, že sdílená knihovna libCfile.so je propojena s kódem):

$ g++ -L/home/himanshu/practice/ -Wall main.cpp -o main -lCfile

Před spuštěním spustitelného souboru se ujistěte, že cesta ke sdílené knihovně je obsažena v proměnné prostředí LD_LIBRARY_PATH.

$ export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH

Nyní spusťte spustitelný soubor ‚main‘ :

$ ./main

 This is a C code

 being used within C++ code

Vidíme tedy, že funkce C byla úspěšně volána z kódu C++.

Přečtěte si také podrobné informace o tom, jak vytvořit sdílené knihovny v Linuxu.

2. Volejte funkce C++ z C

V této části probereme, jak volat funkce C++ z kódu C.

Zde je kód C++ (CPPfile.cpp):

#include <iostream>

void func(void)
{
    std::cout<<"\n This is a C++ code\n";
}

Uvidíme, jak lze funkci func() volat z kódu C.

Prvním krokem k tomu je změnit deklaraci/definici této funkce zavedením externí notace „C“.

#include <iostream>

extern "C" void func(void)
{
    std::cout<<"\n This is a C++ code\n";
}

Dalším krokem je vytvoření knihovny z výše uvedeného kódu. Následující kroky vytvoří sdílenou knihovnu:

 g++ -c -Wall -Werror -fPIC CPPfile.cpp
$ g++ -shared -o libCPPfile.so CPPfile.o

Výše uvedené příkazy by měly vést ke sdílené knihovně libCPPfile.so.

Zde je hlavní kód v jazyce 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;
}

Upozorňujeme, že funkce C++ je zde deklarována jako externí.

Zkompilujte kód C (main.c) takto:

gcc -L/home/himanshu/practice/ -Wall main.c -o main -lCPPfile

a přidejte aktuální cestu k adresáři do proměnné prostředí LD_LIBRARY _PATH

export LD_LIBRARY_PATH=/home/himanshu/practice:$LD_LIBRARY_PATH

Nyní spusťte spustitelný soubor ‚main‘ :

$ ./main

 This is a C++ code

 being used within C code

Výše uvedený výstup ukazuje, že funkce C++ byla úspěšně volána z kódu C.


Linux
  1. Jak definovat a používat funkce v Linux Shell Script

  2. Linux – Jak zkontrolovat, zda je linuxová distribuce bezpečná a neobsahuje škodlivý kód?

  3. Jak volat funkci Bash ve skriptu Bash uvnitř Awk?

  1. CodeBlocks – Free &Cross-platformní C, C++ a Fortran IDE

  2. Jak implementovat časový limit ve volání funkce čtení?

  3. Systémové volání fork() a funkce execv

  1. Jak opravit volání nedefinované funkce apc_fetch() – Závažná chyba PHP [Vyřešeno]

  2. Jak najít volajícího a volaného funkce v kódu C ve vi/vim?

  3. Jak zkompilovat kód Windows Visual C++ na Linuxu