Name mangling
- C++ kursu
- Uzman
- Ders 20/47
- 5 dk
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
#include <iostream>
// add fonksiyonunu buraya tanımla
int main() {
// add'i çağır ve yazdır
return 0;
}Örnek çözüm
#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
int add(int a, int b) { return ____; }
int add(int a, int b) { return a + b; }
Açıklama: a + b toplama işlemini verir.
2 C++ neden name mangling yapar?
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 |