Statik Fonksiyonlar
Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 4 / 61.
Kodu birden fazla dosyaya böldüğünüzde, bir kaynak dosyasında tanımlanan her işlev varsayılan olarak diğer dosyalar tarafından görülebilir. Ancak bazen yalnızca dahili olarak kullanılması gereken yardımcı işlevlere ihtiyaç duyarsınız: diğer dosyaların erişmemesi, hatta varlığından haberdar olmaması gereken işlevlere.
static anahtar sözcüğü bir işleve uygulandığında, görünürlüğünü tanımlandığı dosyayla sınırlar. Bu, başka kaynak dosyalarından çağrılamayan private bir işlev oluşturur; biri onu bildirmeye çalışsa bile.
// math_utils.c
#include "math_utils.h"
// Özel yardımcı - yalnızca bu dosyada görünür
static int square(int x) {
return x * x;
}
// Genel fonksiyon - main.c'den çağrılabilir
int sum_of_squares(int a, int b) {
return square(a) + square(b);
}
Bu örnekte sum_of_squares başlık dosyasında bildirilmiştir ve her yerde kullanılabilir. Ancak square, static olarak işaretlenmiştir; bu nedenle yalnızca math_utils.c içinde bulunur. main.c doğrudan square() işlevini çağırmaya çalışırsa bağlayıcı bir hata üretir: işlev, kendi dosyasının dışında var olmaz.
Bu, C'nin dosya düzeyinde kapsüllemeyi gerçekleştirme biçimidir. Static işlevler, ihtiyacınız olan yardımcı mantığı dahili olarak kullanırken uygulama ayrıntılarını gizlemenize ve herkese açık arayüzünüzü temiz tutmanıza olanak tanır.
Görev
KolayBir sayının karesini hesaplamak için özel bir yardımcı işlev kullanan bir uzaklık hesaplayıcı oluşturalım: programınızın geri kalanından gizli kalması gereken bir ayrıntı.
Üç dosya oluşturacaksınız:
distance.h: İki noktayı temsil eden dört tamsayıyı (x1, y1, x2, y2) alan ve bir tamsayı döndüren tek bir herkese açık işlev olandistance_squaredişlevini bildiren başlık dosyanız.DISTANCE_Hsembolünü kullanarak içerme korumaları ekleyin.distance.c: Uygulamayı içeren kaynak dosyanız. Bir tamsayı alan ve karesini döndürenstaticadlı birsquareyardımcı işlev oluşturun. Bu yardımcı işlev yalnızcadistance.ciçinde görünür olmalıdır. Ardından, (x2-x1)² + (y2-y1)² hesaplamak için statik yardımcınızı kullanarakdistance_squaredişlevini uygulayın.main.c: Başlık dosyasını içeren ve herkese açık işlevi kullanan ana dosyanız.squareyardımcısına burada erişilememelidir: yalnızcadistance_squaredkullanılabilir.
distance_squared işlevi, iki nokta arasındaki Öklid uzaklığının karesini hesaplar. square işlevini statik tutarak bu uygulama ayrıntısını distance.c dışındaki tüm kodlardan gizlersiniz.
Dört tamsayı girdisi alacaksınız: x1, y1, x2 ve y2.
Kare alınmış uzaklığı şu biçimde yazdırın:
Squared distance: {result}Örneğin, (0, 0) ve (3, 4) noktaları için çıktı şöyle olur:
Squared distance: 25Kendin dene
#include <stdio.h>
#include "distance.h"
int main() {
int x1, y1, x2, y2;
scanf("%d", &x1);
scanf("%d", &y1);
scanf("%d", &x2);
scanf("%d", &y2);
// TODO: Giriş koordinatlarıyla distance_squared'i çağır
// and print the result in the format: "Squared distance: {result}"
return 0;
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Modüler Programlama Temelleri
Başlık DosyalarıInclude Guard'larKaynak DosyalarıStatik FonksiyonlarÖzet: Modüler Hesap Makinesi4Kapsülleme
Opaque Pointer KavramıOpaque Struct TanımlamaGetter ve Setter MetotlarıSetter Metotlarında DoğrulamaÖzet: Gizli Kutu2Nesneler ve Metotlar
Nesne Olarak Struct'lar'Self' İşaretçisiConst Doğruluğuİşaretçi vs DeğerYardımcı MetotlarÖzet: Point Manager5Proje: Basit Banka Hesabı
Proje KurulumuHesabın Oluşturulması3Nesne Yaşam Döngüsü
Constructor DeseniDestructor DeseniStack İlklendirmeDerin KopyalamaÖzet: String Wrapper6Kompozisyon Yoluyla Kalıtım
Struct Gömmeİlk Üye KuralıÜst Üyelere ErişimUpcastingÖzet: Şekil HiyerarşisiKendi başına pratik yap: Online C derleyicisi