/  Make C code safe for C++  edit

When C or C++ compiler compiles a function, it generates an object file that contains generated assembly code identified by a symbol generated from function name. Generating this symbol is called name mangling. C compilers use very simple name-mangling: they prepend single “_” to function name i.e. function int foo(int a) is identified in object file by a symbol _foo.
C++ name mangling are much more complicated since C++ has to support classes, overloaded functions etc.
It’s also incompatible with C compiler’s name mangling. It can be a problem.
If a header file for functions compiled by C compiler is included in a file compiled by C++ compiler, the linker won’t be able to link those object files since the names of functions won’t match due to different name mangling.
There is a solution to this problem.
First thing to know is that C++ compilers define __cplusplus preprocessor symbol, so it’s possible to use #ifdef __cplusplus statement to compile parts of the code only by C++ compiler.
Second thing to know is that extern "C" { /* block of code */ } tells C++ compiler to interpret a given block of code as C compiler would i.e. use C compiler’s name mangling for those functions.
All this boring explanation means that in order to make your C code safe for C++, you need to wrap the code in header file with those statements:
#ifdef __cplusplus
extern "C"

/* ... your C code ... */

#ifdef __cplusplus

Feedback about page:

Optional: your email if you want me to get back to you: