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 dahil edildiğ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ı dahil etmesi ya da başlık dosyalarının birbirini dahil etmesiyle ortaya çıkar. Include korumaları 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 üç önişlemci yönergesi kullanır:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
İşte şu şekilde çalışır: #ifndef MATH_UTILS_H, MATH_UTILS_H sembolünün henüz tanımlanmamış olup olmadığını kontrol eder. Eğer tanımlanmamışsa, önişlemci devam eder ve onu hemen #define MATH_UTILS_H ile tanımlar. Bu nokta ile #endif arasındaki her şey derlemeye dahil edilir.
Bu başlık dosyası ikinci kez dahil edildiğinde, MATH_UTILS_H zaten tanımlanmış durumdadır, bu nedenle tüm blok atlanır. Koruma adı genellikle, noktaların ve özel karakterlerin yerine alt çizgilerin kullanıldığı, büyük harflerle yazılmış dosya adıdır.
Oluşturduğunuz her başlık dosyasında include korumaları bulunmalıdır. Bu, derleme hatalarını önleyen ve kodunuzu projenizin herhangi bir yerinden güvenle eklemenizi sağlayan standart bir uygulamadır.
Görev
KolayBir başlık dosyasını include guard'lar ekleyerek birden çok kez dahil edilmeye karşı koruyalım. Önceki dersteki selamlama yardımcı programını temel alacaksın; ancak bu kez başlığın birden çok kez dahil edilmesinin güvenli olduğundan emin ol.
İki dosya oluşturacaksın:
greet.h:greetişlevinin bildirimini içeren başlık dosyan. Bu kez, tüm içeriğiGREET_Hsimgesini kullanarak include guard'larla sar.main.c: Başlığı dahil eden,greetişlevini uygulayan ve onumain()içinden çağıran ana dosyan.
greet işlevi, ad için bir const char* parametresi kabul etmeli ve şunu yazdırmalıdır:
Hello, Alice!Başlık dosyan şu yapıyı izlemelidir:
#ifndef GREET_H
#define GREET_H
// function declaration here
#endifBir girdi alacaksın: bir ad (dize).
Selamlama mesajını, Alice yerine sağlanan adı koyarak yukarıdaki biçimde tam olarak gösterildiği gibi yazdır.
Kendin dene
#include <stdio.h>
#include "greet.h"
// YAPILACAK: "Hello, <name>!" yazdıran greet fonksiyonunu uygula
int main() {
char name[100];
scanf("%s", name);
// YAPILACAK: name değişkeni ile greet fonksiyonunu ç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