extern “C” makes names not mangled.
It used when:
-
We need to use some C library in C++
extern "C" int foo(int);
-
We need export some C++ code to C
extern "C" int foo(int) { something; }
-
We need an ability to resolve symbol in shared library — so we need to get rid mangling
extern "C" int foo(int) { something; } /// typedef int (*foo_type)(int); foo_type f = (foo_type)dlsym(handle,"foo")