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.
Görev
KolayBir ü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:greetfonksiyonunun bildirimini içeren üstbilgi dosyan. Bu kez içeriğin tamamınıGREET_Hsembolünü kullanarak include guard'larla sarmala.main.c: Üstbilgiyi ekleyen,greetfonksiyonunu uygulayan ve onumain()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
#endifBir 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;
}
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