Menu
CoddyTech

Include Guard'lar

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 2 / 61.

Bir başlık dosyası bir projeye birden çok kez eklendiğinde, derleyici aynı bildirimleri tekrar tekrar görür ve bu da hatalara neden olur. Bu durum genellikle birden çok dosyanın aynı başlık dosyasını eklemesi veya başlık dosyalarının birbirini eklemesiyle ortaya çıkar. Include guard'lar bu sorunu çözer.

Bir include guard, bir başlık dosyasının içeriğinin yalnızca bir kez işlenmesini sağlamak için üç ön işlemci yönergesi kullanır:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

İşleyişi şöyledir: #ifndef MATH_UTILS_H, MATH_UTILS_H sembolünün henüz tanımlanmamış olup olmadığını kontrol eder. Tanımlanmamışsa önişlemci devam eder ve hemen #define MATH_UTILS_H ile onu tanımlar. Bu nokta ile #endif arasındaki her şey derlemeye dahil edilir.

Bu başlık dosyası ikinci kez eklendiğinde, MATH_UTILS_H zaten tanımlanmış olur; bu nedenle bloğun tamamı atlanır. Koruma adı genellikle dosya adının büyük harflerle yazılmış hâlidir; noktalar ve özel karakterler alt çizgilerle değiştirilir.

Oluşturduğunuz her başlık dosyasında include guard bulunmalıdır. Bu, derleme hatalarını önleyen ve kodunuzun projenizin herhangi bir yerinden güvenle dahil edilmesini sağlayan standart bir uygulamadır.

challenge icon

Görev

Kolay

Bir üstbilgi dosyasının birden fazla kez eklenmesini, include guard'lar ekleyerek önleyelim. Önceki dersteki selamlama yardımcı programını temel alacaksın; ancak bu kez üstbilginin birden fazla kez eklenmesinin güvenli olduğundan emin ol.

İki dosya oluşturacaksın:

  • greet.h: greet fonksiyonunun bildirimini içeren üstbilgi dosyan. Bu kez içeriğin tamamını GREET_H sembolünü kullanarak include guard'larla sarmala.
  • main.c: Üstbilgiyi ekleyen, greet fonksiyonunu uygulayan ve onu main() içinden çağıran ana dosyan.

greet fonksiyonu, ad için bir const char* parametresi almalı ve şunu yazdırmalıdır:

Hello, Alice!

Üstbilgi dosyan şu yapıyı izlemelidir:

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

Bir girdi alacaksın: bir ad (dize).

Selamlama mesajını, yukarıdaki biçimde gösterildiği gibi, Alice yerine verilen adı koyarak aynen yazdır.

Kendin dene

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

// TODO: "Hello, <name>!" yazdıran greet fonksiyonunu uygula

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: greet fonksiyonunu name ile çağır
    
    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