inline koruma makrosu (inline guard macro)

Bu yapı inline işlevlerin inline açılımının gerçekleştirilip gerçekleştirilmemesini bir anahtar olarak kullanılan makroya bağlar.
Debug
sürecinde inline işlevlerin inline olarak açılımının devreden çıkarılması ve yeniden devreye alınması çok sık duyulan bir ihtiyaçtır. Ancak programın son sürümü (ticari sürümü) oluşturulduğunda genellikle bu işlevlerin inline olarak açılması istenir.
inline açılım yapılması ve yapılmaması arasında sık sık yapılan geçişler bu işlemin daha pratik bir şekilde yapılması gereksinimini doğurmaktadır. inline işlevlerin derleyici tarafından inline olarak açılması isteniyorsa bu işlevler şüphesiz başlık dosyasına konulmalıdır. Derleyicinin bu işlevleri inline olarak açması istenmiyorsa bu işlevlerin tanımları cpp dosyasında yer almalıdır. inline olmayan işlevler başlık dosyasına konulmamlıdır. Bu işlevlerin başlık dosyalarına konulmaları durumunda kaynak dosyalara her eklendiği durumda yeniden tanımlanmaları söz konusudur. Öte yandan inline işlev tanımları başlık dosyasında yer almazlarsa derleyici bu işlevlerin tanımarımı göremez ve gerekli kodları oluşturamaz. Her iki durumda da bağlama (link) aşamasında bağlayıcı program işini yapmayacaktır.
Çözüm için tüm inline işlevleri ipp uzantılı işlevlerin tanımlarını .ipp uzantılı bir dosyaya koyuyor ve bu tanımlara INLINE makrosunu ekliyoruz.
Tüm uygulamalarda olduğu gibi başlık dosyası ve kod dosyası normal olarak oluşturulacak ancak .ipp uzantılı dosyamız inline açılımının istenip istenmediğine bağlı olarak ya başlık dosyası ya da kod dosyası tarafından dahil edilecek.

Başlık dosyasını ise aşağıdaki gibi yapılandıracağız:

Kod dosyamız ise aşağıdaki gibi yapılandırılacak:

Başlangıçta biraz karışık gibi görünebilir. Gelin şimdi son duruma bakalım:
Eğer inline açılım isteniyor ise INLINE_ENABLED makrosu tanımlanacak, inline açılım istenmiyorsa INLINE_ENABLED makrosu tanımlanmayacak.

INLINE_ENABLED makrosu tanımlanırsa neco.hpp başlık dosyası neco.ipp dosyasını dahil edecek. Bu durumda neco.ipp dosyasından gelen Neco::func işlevinin tanımı Neco sınıfının tanımının altında yer alacak.
INLINE makrosu inline anahtar sözcüğüyle yer değiştirecek. Bu durumda neco.hpp dosyası şu hale gelmiş olacak:

Peki INLINE_ENABLED makrosu tanımlanırsa neco.cpp dosyasının durumu ne olacak?

koşulu yanlış olduğu için neco.ipp dosyası hiç dahil edilmeyecek. ve
makrosu devre dışı kalacak.
Şimdi de INLINE_ENABLED makrosunun tanımlanmaması durumuna bakalım:
neco.hpp dosyasında
koşulu yanlış olduğundan neco.ipp dosyası dahil edilmeyecek. Böylece başlık dosyamızda yalnızca
kodu kalacak. Kod dosyamızda ise neco.ipp dosyası dahil edilecek ve INLINE makrosunun silinmesiyle kod dosyamız şu hale gelecek:

Necati Ergin

C ve Sistem Programcıları Derneğinde eğitmen olarak çalışıyor.

Bunlar da ilginizi çekebilir

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kod Eklemek İçin Okuyun