Önişlemci ile ilgili çok fazla karışıklık var gibi görünüyor.
Derleyicinin, #include
bu satırı içerdiği dosyaların içeriği ile değiştirdiğini gördüğü zaman ne yapar ?
a.h
Bu içeriğe sahip bir dosyanız varsa :
typedef int my_number;
ve b.c
bu içeriğe sahip bir dosya :
#include "a.h"
#include "a.h"
dosya b.c
derlenmeden önce önişlemci tarafından çevrilecektir.
typedef int my_number;
typedef int my_number;
tür my_number
iki kez tanımlandığından derleyici hatasına neden olur . Tanım aynı olmasına rağmen, C dili tarafından buna izin verilmez.
Bir başlık genellikle birden fazla yerde kullanıldığından, genellikle C'de kullanılan korumaları içerir . Bu şöyle görünür:
#ifndef _a_h_included_
#define _a_h_included_
typedef int my_number;
#endif
Dosya b.c
, önceden işlendikten sonra üstbilginin tüm içeriğini iki kez içerecektir. Ancak, makro _a_h_included_
zaten tanımlanmış olacağından, ikinci örnek yok sayılır .
Bu gerçekten iyi çalışıyor, ancak iki dezavantajı var. Her şeyden önce içerme korumaları yazılmalı ve makro adı her başlıkta farklı olmalıdır. İkincisi, derleyici hala başlık dosyasını aramalı ve içerdiği sıklıkta okumalıdır.
Objective-C #import
önişlemci komutuna sahiptir (bazı derleyiciler ve seçeneklerle C ve C ++ kodu için de kullanılabilir). Bu neredeyse aynıdır #include
, ancak dahili olarak hangi dosyanın zaten dahil edildiğini de not eder. #import
Hat sadece karşılaşıldığında ilk defa adlı dosyanın içeriği ile yer değiştirir. Bundan sonra her seferinde göz ardı edilir.