C++ implementations have name mangling because they live on systems designed for C, which don’t allow symbols such as int max(int,int)
C implementations (would) need name mangling if they ran on a system that used case-insensitive comparisons on symbol names, or on ones whose character set is smaller than that allowed in C symbols (I know examples of neither, but Wikipedia has an example that encodes the calling convention in the symbol name: https://en.wikipedia.org/wiki/Name_mangling#C)
”If name mangling was standardized, could I link code compiled with compilers from different compiler vendors?
Short answer: Probably not.”
(click link for more info)
yet the real life answer is that I can link C++ code built with three different compiler on linux (gcc / clang / icc) and three / two on windows (clang / cl.exe / icc or clang / gcc)