Temelleri Anlamak
C++ işlevlerini C'den çağırmak ve C++ nesnelerini kullanmak söz konusu olduğunda, birkaç temel öğenin dikkate alınması gerekir:
C'deki C++ Sınıflarına Referans Verme
C'deki C++ sınıflarına başvuruda bulunmaya yönelik yaygın bir yaklaşım, C ve C++ kodu arasında aktarılabilecek sınıflara yönelik işaretçilerin kullanılmasını içerir.
İsim Mangle
C'de tanımayı etkileyebilecek ad değişikliklerini önlemek için adların tutarlı tutulması çok önemlidir. Bu, C'nin işlevleri ve nesneleri doğru şekilde tanımlayabilmesini ve kullanabilmesini sağlar.
Çift Amaçlı Başlık Dosyası
Bir başlık dosyası, hem C hem de C++ için ikili bir amaca hizmet eden çok önemli bir rol oynar. C++ tarafından tanınabilen sınıf tanımlarını içerir ve C için erişimci işlevlerini kapsar.
C'den C++ Nasıl Çağrılır
C++ işlevlerini C'den çağırmak için harici “C” bildirimi çok önemlidir. C++ işlevlerine uygulandığında, derleme işlemi sırasında işlev adlarının C stilinde (C bağlantısı kullanılarak) ele alınmasını sağlar. C, C++ derlemesi sırasında oluşabilecek işlev aşırı yüklemesi ve ad karışıklığı gibi C++ özelliklerini tanımıyor. C++ derleyicisi, harici 'C'yi kullanarak, C kurallarına uygun işlev adları oluşturarak kusursuz bir birlikte çalışabilirlik sağlar. Bu bildirim, bir C kodunun adlandırma çakışmaları veya uyumluluk sorunlarıyla karşılaşmadan C++ işlevlerine erişmesine ve bunları kullanmasına olanak tanıyan standartlaştırılmış bir arabirim sağlar. Aşağıda C++'ı C'den çağırma örnekleri verilmiştir. Bu kombinasyonun nasıl çalıştığını anlamak için örneklere daha yakından bakalım.
Pratik Örnekler: C'den C++'ı Çağırarak Çemberin Alanını Hesaplama
Bu basit örnekte, C dilinde bir C++ fonksiyonunu çağırarak bir dairenin alanını nasıl hesaplayabileceğiniz konusunda size rehberlik edeceğiz. Bu kod bir başlık dosyasından (circle.h) ve bir uygulama dosyasından (circle.cpp) oluşur. Kodun ilk kısmı başlık dosyasındaki harici C bildirimini içerir. Aşağıdaki koda bakın. Daha sonra her kod satırını ayrı ayrı ele alalım:
#ifndef CIRCLE_AREA#CIRCLE_AREA'yı tanımla
dış 'C' {
çift hesapla_CArea ( çift harika ) ;
}
#endif
çift Circle_CArea ( çift harika ) {
geri dönmek 3.14159 * harika * harika ;
}
Her bir parçayı parçalayalım:
#ifndef CIRCLE_AREA ve #define CIRCLE_AREA
Bu satırlar, başlık dosyasının içeriğinin derleme sürecine yalnızca bir kez dahil edilmesini sağlayan içerme korumalarının bir parçasıdır. CIRCLE_AREA tanımlanmadıysa sonraki kod dahil edilecek ve CIRCLE_AREA tanımlanacaktır.
dış 'C'Bu sözdizimi, aşağıdaki işlevin bir C bağlantısına sahip olduğunu bildirmek için kullanılır. Hem C hem de C++'dan çağrılacak bir kod yazarken bu çok önemlidir.
çift hesapla_CArea ( çift harika ) ;Bu satır, double argümanı (rad) alan ve double döndüren “calculate_Carea” adında bir fonksiyonu bildirir.
Başlık dosyasındaki harici “C” bildirimi, derleyiciye işlev için C tarzı bir bağlantı kullanması konusunda bilgi verir ve işlevi C kodundan çağrılabilir hale getirir. Bir dairenin alanını bulmak için bu kodu “circle.h” dosyasına kaydederek kullanın. Bu başlık dosyasını kaydettikten sonra tek yapmanız gereken bunu C++ programına başlık dosyası olarak eklemek ve istediğiniz işlevi gerçekleştirmektir. Aşağıdaki dairenin alanını hesaplayan C kodudur. “main.c” dosyası C++ başlığını içerir ve doğrudan “Circle_Carea”yı çağırır. Aşağıdaki koda bakın:
#include 'daire.h'int ana ( ) {
çift ışınlar = 5.0 ;
çift alan = Circle_CArea ( ışınlar ) ;
baskı ( 'Çemberin alanı: %.2f \N ' , alan ) ;
geri dönmek 0 ;
}
Bu basit C programı, önceki “circle.h” dosyasında tanımlanan bir fonksiyonu kullanarak bir dairenin alanını hesaplar ve yazdırır. Kodu parçalayalım:
#'daire.h'yi dahil etBu satır programdaki “circle.h” başlık dosyasının içeriğini içerir. Başlık dosyası muhtemelen daire hesaplamalarıyla ilgili işlev bildirimlerini veya makroları içerir.
int ana ( ) {Programın yürütülmesi, C programlarının giriş noktası olan ana işlevle başlar.
çift ışınlar = 5.0 ;Double tipinde bir rads değişkeni bildirilir ve 5,0 değeriyle atanır. Bu değişken muhtemelen dairenin yarıçapını temsil ediyor.
çift alan = Circle_CArea ( ışınlar ) ;“Circle_Carea” adlı bir fonksiyon, argüman olarak yarıçap radsları ile çağrılır ve sonuç, değişken alanda saklanır.
baskı ( 'Çemberin alanı: %.2f \N ' , alan ) ;Sonuç “printf” kullanılarak konsola yazdırılır. “Çemberin alanı: %.2f\n” dizesi, alan değeri için “%f” yer tutucusuna sahip bir biçim dizesidir. “%.2f” içindeki “.2” yalnızca iki ondalık basamağın görüntülenmesi gerektiğini belirtir.
geri dönmek 0 ;Ana işlev, programın işletim sisteminde başarılı bir şekilde yürütüldüğünü gösteren 0 değerini döndürerek sona erer.
Özetle, başlık dosyası C bağlantılı bir işlevi bildirir ve uygulama dosyası bir dairenin alanını hesaplama mantığını tanımlar. Bu ayırma, kodun hem C hem de C++ programlarında kullanılmasına olanak tanır. Aşağıdaki resimde verilen kodun çıktısına bakın:
Çıktıda gördüğünüz gibi dairenin hesaplanan alanı 78,54 yani alan = 3,14*5*5 = 78,54'ün hesaplamasıdır. Alanı hesaplama işlevi “circle.h” başlık dosyasında tanımlanır ve daha sonra C++ dosyasında extern “C” yardımıyla çağrılır.
Çözüm
Bu kılavuzda C++'ı C programlarınıza entegre etme sürecinde size rehberlik ettik. Bir C++ işlevini C kod tabanlarına entegre etmek, işaretçilerin, ad yönetiminin ve çift amaçlı başlık dosyalarının dikkatli bir şekilde değerlendirilmesini gerektirir. Sunulan örnekler bu entegrasyonun sağlanmasına yönelik pratik bir yaklaşımı göstermektedir. Artık bu iki programlama dilini nasıl bağlayacağınızı gördüğünüze göre daha fazla araca sahipsiniz. C ile çalışırken C++'ın gücünün kilidini açmak, projelerinize tamamen yeni bir işlevsellik düzeyi kazandırabilir.