CodeBlanks Logo Icon CodeBlanks

extern C

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

main.cpp
#include <iostream>

// extern "C" ile hello fonksiyonunu buraya tanımla

int main() {
    // hello'yu çağır
    return 0;
}

Örnek çözüm

main.cpp
#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?

main.cpp
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

Soru
extern "____" { void legacy(); }
Cevap
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ı

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