CodeBlanks Logo Icon CodeBlanks

Name mangling

Name mangling ve C++ sembol isimlerini öğrenirsin.

Name mangling

Name mangling, derleyicinin fonksiyon imzasını sembol adına kodlamasıdır. C++ aşırı yükleme ve ad alanlarını destekledüğü için aynı foo adı birden çok kez kullanılabilir; bağlayıcı bunları ayırt etmek için imzayı ada gömer.

Örnek: int add(int, int) Itanium ABI'da _Z3addii olur. Burada _Z öneki, 3 ad uzunluğu, add ad, ii iki int parametre. double add(double, double) ise _Z3adddd olur; farklı imza farklı sembol.

Mangling gösterimi

Itanium mangling kodları: v=void, i=int, d=double, b=bool, c=char. Adın başına uzunluğu yazılır: 3foo = foo.

Ad alanları N...E ile sarılır: ns::bar() → _ZN2ns3barEv. Burada N başlangıç, 2ns ns (uzunluk 2), 3bar bar (uzunluk 3), E bitiş, v void parametre. Böylece her imza tek bir sembole karşılık gelir.

Uygulama add fonksiyonu yaz

int add(int a, int b) yaz; gövdesi return a + b;. main içinde std::cout << add(3, 4); yaz.

Başlangıç kodu

main.cpp
#include <iostream>

// add fonksiyonunu buraya tanımla

int main() {
    // add'i çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

int add(int a, int b) {
    return a + b;
}

int main() {
    std::cout << add(3, 4);
    return 0;
}

Beklenen çıktı

7

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Gövdeyi tamamla

Soru
int add(int a, int b) { return ____; }
Cevap
int add(int a, int b) { return a + b; }

Açıklama: a + b toplama işlemini verir.

2 C++ neden name mangling yapar?

main.cpp
int add(int, int);
double add(double, double);
  • Sınıf boyutunu küçültmek için
  • Programı hızlandırmak için
  • Kodu gizlemek için
  • Aşırı yükleme ve ad alanları için Doğru cevap

Açıklama: Mangling, aynı adlı farklı imzaları bağlayıcıda ayırır.

3 İmzayı mangled sembole eşle

Kavram Anlamı
add(int, int) _Z3addii
add(double, double) _Z3adddd
foo() _Z3foov
ns::bar() _ZN2ns3barEv

Uzman bölümündeki tüm dersler