If the C code that is being called is not part of the standard C library, the C++ compiler needs to know that the function is a C function. To do this, include an extern "C" block in the C++ code, and declare the C function inside the block:
extern "C" {
void myCfunction(int x, int y);
void yourCfunction(float z);
}
An entire C header file can be included within an extern "C" block:
extern "C" {The other approach is to modify the C header file directly. The extern "C" part is wrapped in an #ifdef to make sure these lines are seen only by C++ compilers, not by C compilers. The idea is simple: insert the following lines near the top of the C header file.
#include "my-C-header.h"
#include "your-C-header.h"
}
#ifdef __cplusplusThen insert the following near the bottom of the C header file.
extern "C" {
#endif
#ifdef __cplusplusThis works because the C++ compiler automatically #defines the preprocessor symbol __cplusplus.
}
#endif
How can C code call C++ code?
The C++ compiler must be told to compile the C++ function using C-compatible calling conventions (also known as C linkage). This is done using the same extern "C" construct, the extern "C" goes around the declaration of the C++ function rather than the declaration of the C function. The C++ function is then defined just like any other C++ function:
// This is C++ code
extern "C" {
void sample(int i, char c, float x) throw();
}
void sample(int i, char c, float x) throw()
{
<-- 1
}
(1) The C++ code that defines the function goes here
No comments:
Post a Comment