Leksykon IT › Programowanie › Dekorowanie nazw (name mangling)

Dekorowanie nazw (name mangling)

Programowanie Svenska → Zaktualizowano: 2026-10-06

Kodowanie przez kompilator całej sygnatury — przestrzeni nazw, klasy, typów parametrów, kwalifikatorów — w jedną nazwę symbolu, bo linkery rozumieją tylko płaskie nazwy.

To mechanizm umożliwiający przeciążanie: f(int) i f(double) stają się dwoma różnymi symbolami i mogą współistnieć. Na co dzień liczą się dwie konsekwencje. Po pierwsze, kodowanie zależy od kompilatora i jest częścią interfejsu binarnego, dlatego plików obiektowych z niezgodnych kompilatorów nie da się zlinkować, a rozdzielenie typu łańcuchowego w libstdc++ przez lata powodowało zagadkowe błędy o brakujących symbolach. Po drugie, extern "C" wyłącza dekorowanie i daje zwykłą nazwę, co jest konieczne dla wszystkiego, co ma być wywoływane z C lub wyszukiwane dynamicznie w czasie działania. Narzędzia c++filt i nm -C tłumaczą nazwy z powrotem, a tak właśnie czyta się błąd linkera.

← Wróć do leksykonu