0Pricing
C Academy · Ders

Ekleme Koruyucuları

Çift eklemeyi önleyin.

Ekleme Koruyucuları, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

İki Kez Dahil Etme Sorunu

Başlık dosyaları çoğu zaman başka başlık dosyalarını dahil eder. Bir başlık dosyasının aynı kaynak dosyasına iki kez dahil edilmesi kolayca gerçekleşebilir.

Bu olduğunda, içindeki her bildirim iki kez görünür. struct veya typedef gibi tür tanımları için bu bir derleme hatasıdır: Bir tür birden fazla kez tanımlanamaz.

Fark Ettirmeden Nasıl Ortaya Çıkar

a.h ve b.h dosyalarının ikisinin de types.h dosyasını dahil ettiğini varsayalım. Her iki dosyayı da dahil eden bir kaynak dosyasında types.h iki kez yapıştırılmış olur.

Önişlemci, başlık dosyası metnini olduğu gibi kopyalar; bu nedenle types.h içindeki tanımlar yinelenir ve yeniden tanımlama hatası tetiklenir.

/* a.h */ #include "types.h"
/* b.h */ #include "types.h"
/* main.c */
#include "a.h"
#include "b.h"   /* types.h now seen twice */

Dahil Etme Koruması

Dahil etme koruması, bir başlık dosyasını birçok kez dahil etmeyi güvenli hale getiren küçük bir önişlemci tekniğidir.

Başlık dosyasının tamamını koşullu bir yapının içine alır; böylece gövde yalnızca ilk seferde işlenir. Sonraki dahil etme işlemleri tamamen atlanır.

#ifndef TYPES_H
#define TYPES_H

/* header contents here */

#endif /* TYPES_H */

Koruma Nasıl Çalışır

Başlık dosyası ilk kez görüldüğünde TYPES_H tanımlı değildir; bu nedenle #ifndef doğru olur ve gövde işlenir. Ardından #define makroyu tanımlar.

Sonraki dahil etme işlemlerinde TYPES_H zaten vardır; bu nedenle #ifndef yanlış olur ve önişlemci doğrudan #endif satırına atlar.

#ifndef TYPES_H   /* true only the first time */
#define TYPES_H   /* remember we've been here */
/* ... body ... */
#endif

Korumalı Tam Bir Başlık Dosyası

Burada bir tür tanımını koruyan gerçekçi bir başlık dosyası görülmektedir.

Birçok dosya point.h dosyasını doğrudan veya dolaylı olarak dahil etse bile Point yapısı her çeviri biriminde tam olarak bir kez tanımlanır.

/* point.h */
#ifndef POINT_H
#define POINT_H

typedef struct {
    int x;
    int y;
} Point;

Point point_add(Point a, Point b);

#endif

Makro Adını Seçme

Koruma makrosu projenizin tamamında benzersiz olmalıdır; aksi halde iki başlık dosyası çakışabilir ve birbirlerini sessizce gizleyebilir.

Yaygın bir kurala göre ad, dosya adından türetilir ve büyük harfle yazılır: point.h, POINT_H olur; net/socket.h ise NET_SOCKET_H olur.

#ifndef NET_SOCKET_H
#define NET_SOCKET_H
/* ... */
#endif

Ayrılmış Adlardan Kaçının

Alt çizgi ve ardından büyük harfle başlayan veya çift alt çizgi içeren tanımlayıcılar derleyiciye ve standart kitaplığa ayrılmıştır.

__POINT_H__ gibi korumalardan kaçının. POINT_H gibi sade bir biçim güvenli ve açıktır.

#ifndef _POINT_H_   /* risky: reserved name pattern */
#ifndef POINT_H     /* preferred */

#pragma once Seçeneği

Modern derleyicilerin çoğu, başlık dosyasının üst kısmına yazılan ve aynı işi yapan tek satırlık #pragma once yönergesini destekler.

Daha kısadır ve ad çakışmalarını önler; ancak C standardının bir parçası değildir. Geleneksel #ifndef korumaları her yerde çalışır.

/* point.h */
#pragma once

typedef struct { int x; int y; } Point;

Korumalar ve Pragma

#ifndef korumaları tamamen taşınabilirdir ve standarttır; ancak her başlık dosyası için benzersiz bir makro gerektirir.

#pragma once kısa ve çakışmasızdır; ancak derleyici desteğine dayanır. Bazı projeler en yüksek güvenlik için ikisini de kullanır: bir pragma ile klasik bir korumayı birlikte.

#pragma once
#ifndef POINT_H
#define POINT_H
/* ... */
#endif

Korumalar Çeviri Birimi Başınadır

Dahil etme koruması, bir kaynak dosyası derlenirken o dosya içindeki yinelenen dahil etmeleri önler.

Bir başlık dosyasının ayrı bir .c dosyasının her birinde bir kez işlenmesini önlemez. Bu sorun değildir; çünkü her kaynak dosyası ayrı bir çeviri birimidir.

Bunu Alışkanlık Edinin

Yazdığınız her başlık dosyasına daha ilk satırdan itibaren bir dahil etme koruması ekleyin. Bu, üç satıra mal olur ve bir dizi kafa karıştırıcı hatayı önler.

Basit başlık dosyaları bile ileride başka başlık dosyaları aracılığıyla dolaylı olarak dahil edilebilir; bu nedenle en baştan koruma eklemek sorunları önler.

/* config.h */
#ifndef CONFIG_H
#define CONFIG_H
#define MAX_USERS 100
#endif

Kısa Sınama

Dahil etme korumalarını ne kadar iyi anladığınızı sınayın.

Özet

Bir başlık dosyasının iki kez dahil edilmesinin neden yeniden tanımlama hatalarına yol açtığını ve bir dahil etme korumasının bunu nasıl önlediğini öğrendiniz.

Benzersiz bir makroyla #ifndef/#define/#endif kullanın veya #pragma once seçeneğini tercih edin. Sırada, extern ile değişkenleri dosyalar arasında paylaşmayı inceleyeceğiz.

Sıkça Sorulan Sorular

“Ekleme Koruyucuları” dersi ücretsiz mi?

Evet — “Ekleme Koruyucuları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“Ekleme Koruyucuları” dersinde ne öğreneceğim?

Çift eklemeyi önleyin. C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Ekleme Koruyucuları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Başlık ve Kaynak Dosyaları
  2. Ekleme Koruyucuları
  3. extern ve Bağlama
  4. Birden Çok Dosyayı Derleme
← C Academy Sayfasına Dön