简体   繁体   中英

Calling C functions within C++

I have a medium length C file with a bunch of functions (NOT under a header file - just a bunch of functions), that I wish to gather and use under a C++ project I'm developing.

Now I've read about the extern function but I've only seen it work on small C functions that are under a .h file.

But I wish to include these functions without messing with the C files themselves since I don't really understand them - I just need the function "under the hood". Is there any easy simple solution to this problem?

Yes, you just need some extern "C" declarations visible in your C++ code:

extern "C" {
    int my_C_function_1(void);
    int my_C_function_2(void);
}

This can either go in a suitable header, or if it's only used within one particular .cpp file then you could just put it there.

Note that if your C functions are already declared within a C header somewhere you can just do this within your .cpp file:

extern "C" {
#include "my_C_header.h"
}

You need to make a C++ header file myheader.hh . It starts with

 #ifndef MYHEADER_INCLUDED
 #define MYHEADER_INCLUDED
 extern "C" {

then you declare all your public C functions, types, macros, etc.... At last you end it with

 }; // end extern C
 #endif MYHEADER_INCLUDED

In your C++ program, add #include "myheader.hh"

Alternatively (and instead of using myheader.hh ), you might add (after other includes, but before C++ code) in your C++ file something like

extern "C") {
#include "your-C-code.c"
};

(But it might not work).

You'll need to declare the functions, typically in a header file, in order to call them from C++. If you compile these functions with a C compiler, then you will indeed need to surround the declarations with extern "C" ; eg

extern "C" {
int foo(int, int);
}

If you have the source, then you could also modify it to include the header file (sans extern "C" ) and compile the functions with your C++ compiler.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM