Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Calling C++ functions in C

&pagelevel(4)&pagelevel

C++ functions can be used in C only if they have a type that can also be represented in C.

Depending on whether or not the C++ source is available, there are different ways to achieve linkage between functions.

If the C++ source code is available, the C++ function can be declared there with anextern “C” directive; however, it must be declared with extern “C” in every C++
source fragment that calls the function!
In the calling C source code, a “plain” extern declaration is required for the C++ function.

If the C++ source is not available or a general new declaration and recompilation is too cumbersome, an additional function level can be inserted. This is done by writing a so-called “wrapper” function in C++ and defining it as extern “C”. The wrapper function can then be called in C without restrictions.

Example

C++ function to be called:

int hidden(int i)
{
  // ...
}

Wrapper function:

extern int hidden(int);
extern "C" int wrapper(int i)
{
  return hidden(i);
}

C source fragment that calls the wrapper function:

extern int wrapper(int);
int main(void)
{
  printf("%d\n", wrapper(100));
  return 0;
}

This technique can also be used if a C++ function contains a parameter with a type that does not directly match a C type. In the case of a C++ function with a reference type parameter, for example, a wrapper function with a parameter of type pointer could be written and called instead.