Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Bir 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 olan distance_squared işlevini bildiren başlık dosyanız. DISTANCE_H sembolünü kullanarak içerme korumaları ekleyin.
  • distance.c: Uygulamayı içeren kaynak dosyanız. Bir tamsayı alan ve karesini döndüren static adlı bir square yardımcı işlev oluşturun. Bu yardımcı işlev yalnızca distance.c içinde görünür olmalıdır. Ardından, (x2-x1)² + (y2-y1)² hesaplamak için statik yardımcınızı kullanarak distance_squared işlevini uygulayın.
  • main.c: Başlık dosyasını içeren ve herkese açık işlevi kullanan ana dosyanız. square yardımcısına burada erişilememelidir: yalnızca distance_squared kullanı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: 25

Kendin 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;
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online C derleyicisi