extern C
- C++ kursu
- Uzman
- Ders 22/47
- 5 dk
extern C ile C uyumluluğunu öğrenirsin.
extern C
extern "C" bağlantı belirtimi, bir fonksiyon veya değişken için C bağlantısı ister; yani name mangling kapatılır. Sembol, kaynak koddaki adla birebir aynı kalır.
Örnek: extern "C" void greet() için sembol greet olur (mangling olmadan). Böylece C ile derlenmiş bir kütüphane C++ programından çağrılabilir. Tersine, C kodu C++ fonksiyonunu extern "C" ile çağırabilir. Bu, C ve C++ arasında köprüdür.
C ve C++ karışımı
Bir başlık dosyası hem C hem C++ tarafında kullanılacaksa extern "C" bloğu #ifdef __cplusplus ile korunur. Böylece C derleyicisi bu bloğu görmez; C++ derleyicisi görür.
Örnek: #ifdef __cplusplus\nextern "C" {\n#endif\nvoid greet();\n#ifdef __cplusplus\n}\n#endif. Bu deyim standart C kütüphanelerinde ve gömülü sistemlerde yaygındır. C++ tarafı manglesiz greet sembolünü çağırır; C tarafı zaten mangling yapmaz.
Uygulama extern C ile hello yaz
extern "C" void hello() yaz; gövdesi std::cout << "Merhaba";. main içinde hello(); yaz.
Başlangıç kodu
#include <iostream>
// extern "C" ile hello fonksiyonunu buraya tanımla
int main() {
// hello'yu çağır
return 0;
}Örnek çözüm
#include <iostream>
extern "C" void hello() {
std::cout << "Merhaba";
}
int main() {
hello();
return 0;
}Beklenen çıktı
Merhaba
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 extern "C" ne yapar?
extern "C" void greet();- Kodu C diline çevirir
- Name mangling'i kapatır Doğru cevap
- Programı hızlandırır
- Sınıfları kaldırır
Açıklama: extern C, sembol adını kaynak koddaki adla aynı tutar.
2 extern C bloğunu tamamla
extern "____" { void legacy(); }
extern "C" { void legacy(); }
Açıklama: extern "C" ile C bağlantısı istenir.
3 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
extern "C" |
C bağlantısı |
void greet() |
Manglesiz sembol |
_Z3foov |
Manglelı sembol |
namespace |
Ad alanı |