Menu
Coddy logo textTech

Kaynak Dosyaları

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 3 / 61.

Şu ana kadar, fonksiyon bildirimlerini başlık dosyalarına yerleştirdik, ancak asıl fonksiyon kodu (tanımı) ana dosyada yer aldı. Modüler programlamadaki bir sonraki adım, bu tanımları kendi kaynak dosyalarına (.c dosyaları) taşımaktır.

Bu, temiz bir üç bölümlü yapı oluşturur: başlık dosyası (header) fonksiyonları bildirir, ayrı bir kaynak dosyası bunları tanımlar ve main sadece bunları kullanır. İşte şöyle görünür:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

math_utils.c dosyasının kendi başlık dosyasını dahil ettiğine dikkat edin. Bu, fonksiyon tanımının bildirimle eşleşmesini sağlar; eğer eşleşmezlerse, derleyici hatayı yakalayacaktır. Ana dosyanın fonksiyonu kullanmak için sadece başlık dosyasını dahil etmesi yeterlidir; add fonksiyonunun içsel olarak nasıl çalıştığını bilmesine gerek yoktur.

Bu ayrım, uygulama ayrıntılarını gizli tutar ve bu fonksiyonları kullanan dosyalara dokunmadan fonksiyon mantığını değiştirmenize olanak tanır.

challenge icon

Görev

Kolay

Kodunuzu uygun üç dosyalı yapıda düzenleyerek basit bir matematik yardımcı programı oluşturalım: bildirimler için bir başlık (header) dosyası, uygulamalar için bir kaynak (source) dosyası ve bunları kullanan bir ana (main) dosya.

Üç dosya oluşturacaksınız:

  • math_ops.h: İki işlem için fonksiyon bildirimlerini içeren başlık dosyanız: multiply ve subtract. Her iki fonksiyon da iki tam sayı alır ve bir tam sayı döndürür. MATH_OPS_H sembolünü kullanarak koruyucuları (guards) eklemeyi unutmayın.
  • math_ops.c: multiply ve subtract fonksiyonlarının gerçek uygulamalarını içeren kaynak dosyanız. Bildirimlerin tanımlarla eşleştiğinden emin olmak için bu dosya kendi başlık dosyasını içermelidir.
  • main.c: Başlık dosyasını dahil eden ve hesaplamaları yapmak için her iki fonksiyonu da kullanan ana dosyanız.

multiply fonksiyonu iki tam sayının çarpımını döndürmeli ve subtract fonksiyonu birinci tam sayıdan ikinciyi çıkararak sonucu döndürmelidir.

İki tam sayı girdisi alacaksınız: a ve b.

Ana fonksiyonunuzda, her iki işlemin sonuçlarını ayrı satırlara yazdırın:

Product: {result of multiply}
Difference: {result of subtract}

Örneğin, 8 ve 3 girdileriyle çıktı şöyle olacaktır:

Product: 24
Difference: 5

Kopya kağıdı

Fonksiyon tanımları, ana dosyadan ayrı kaynak dosyalara (.c dosyaları) taşınabilir ve üç bölümlü modüler bir yapı oluşturulabilir:

  • Başlık dosyası (.h): Fonksiyon bildirimlerini içerir
  • Kaynak dosyası (.c): Fonksiyon tanımlarını içerir
  • Ana dosya (main.c): Fonksiyonları kullanır

Örnek yapı:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

Kaynak dosyası (.c), fonksiyon tanımının bildirimle eşleştiğinden emin olmak için kendi başlık dosyasını içermelidir. Ana dosyanın fonksiyonları kullanmak için yalnızca başlık dosyasını dahil etmesi yeterlidir, böylece uygulama detayları gizli tutulur.

Kendin dene

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: a ve b ile çarpma fonksiyonunu çağırın, sonucu saklayın
    
    // TODO: a ve b ile çıkarma fonksiyonunu çağırın, sonucu saklayın
    
    // TODO: Sonuçları şu formatta yazdırın:
    // Product: {çarpma sonucu}
    // Difference: {çıkarma sonucu}
    
    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.

Object Oriented Programming bölümündeki tüm dersler