It is not uncommon for C++ code fragments to be called by non-C++ programs such as a C-based communication software, COBOL based TP monitors and the likes. However, global functions in C++ cannot be called by non-C++ programs since the function name is very different from the one supplied by the programmer. Why is this? By default, the C++ compiler uses a technique termed name mangling which incorporates the function name with its signature (list of arguments) in order to create a unique name for it, even in case of overloading (this technique is used both for external function and class member functions).
//the following global functions have distinct names generated by the compiler void f(int); //x__f_i this may be the name generated by the compiler for this f()void f(long, char* ); //x__f_pc this may be the name generated by the compiler for this f()
In order to enforce the compiler to avoid name mangling, a global function has to be declared as extern “C”:
extern “C” void f(int); //now the generated name is identical to the one given by the programmer: f
Mind, however, that a function declared as extern “C” cannot be overloaded, and that extern “C” declaration can only be applied to global functions.