Önişlemci ile ilgili çok fazla karışıklık var gibi görünüyor.
Derleyicinin, #includebu satırı içerdiği dosyaların içeriği ile değiştirdiğini gördüğü zaman ne yapar ?
a.hBu içeriğe sahip bir dosyanız varsa :
typedef int my_number;
ve b.cbu içeriğe sahip bir dosya :
#include "a.h"
#include "a.h"
dosya b.cderlenmeden önce önişlemci tarafından çevrilecektir.
typedef int my_number;
typedef int my_number;
tür my_numberiki 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. #importHat 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.