/
What is C++ name mangling?

What is C++ name mangling?

How is it that we can overload a function to accept different input parameters in a language like C++? In C we are not allowed to do this. How does the compiler represent different entities with the same identifier?

In the compiler construction, languages like C++ encode information into symbol names to contain information such as parameter types and return types.

This enables support for features such as overloading and bug detection - to check for things like the wrong assignment of types or wrong inputs etc.

Simple Example

Two C++ functions defined named f():

int f () { return 1; } int f (int) { return 0; } void g () { int i = f(), j = f(0); }

These are distinct functions, with no relation to each other apart from the name. The C++ compiler will therefore encode the type information in the symbol name, the result being something resembling:

int __f_v () { return 1; } int __f_i (int) { return 0; } void __g_v () { int i = __f_v(), j = __f_i(0); }

Even though its name is unique, g() is still mangled: name mangling applies to all C++ symbols (those not in an extern "C"{} block).

To avoid name mangling in C++, define symbols in an extern "C"{} block. This interprets the block as C code rather than C++.

 

Related content

Built in C++ namespaces make it hard to refactor code
Built in C++ namespaces make it hard to refactor code
More like this
What problem is created if a header file is included twice?
What problem is created if a header file is included twice?
More like this
Const References for Inputs and Non const Pointers for Outputs
Const References for Inputs and Non const Pointers for Outputs
More like this
Operator Overloading
Operator Overloading
More like this
C Preprocessor
C Preprocessor
More like this
If we have code which uses "using" from two namespaces then which one applies?
If we have code which uses "using" from two namespaces then which one applies?
More like this