Linker, Loader und ausführbare Formate
Was ist der Hauptzweck des „Name Mangling“, bei dem der C++-Compiler Symbolnamen durch Anfügen von Informationen wie Argumenttypen an den Funktionsnamen bildet?
- AFunktionsnamen unlesbar zu machen, damit das Programm nicht gestohlen wird
- BFunktionsnamen zu kürzen, damit die ausführbare Datei kleiner wird
- CDem Linker die Unterscheidung von Funktionen gleichen Namens mit unterschiedlichen Argumenttypen (Überladung) und von Namensräumen zu ermöglichen
Antwort und Erläuterung anzeigen
Antwort: C. Dem Linker die Unterscheidung von Funktionen gleichen Namens mit unterschiedlichen Argumenttypen (Überladung) und von Namensräumen zu ermöglichen
Der Linker vergleicht Symbole nur anhand der Namenszeichenkette. In C++ können Funktionen gleichen Namens wie „print(int)“ und „print(double)“ angelegt werden, die so nicht unterscheidbar wären. Der Compiler bettet daher Argumenttypen u. Ä. in den Namen ein, etwa „_Z5printi“. Funktionen in C werden nicht dekoriert; beim Aufruf von C-Funktionen aus C++ wird daher „extern "C"“ angegeben, um das Mangling zu unterbinden.