X makrosu

Elimizde bir liste var ve bu listeyi kaynak dosyalarımızda bir çok yerde kullanıyoruz. Bu listeyle ilgili mantıksal bir ilişkisi olan kodlarımız, örneğin, dizilerimiz, numaralandırma sabitlerimiz, switch deyimlerimiz var. Listeye bir öğe eklendiğinde bu listeyle mantıksal ilişkisi olan bu kodlarımızın değiştirilmesi gerekiyor. X makrosu olarak bilinen idiyom hem işimizi kolaylaştırıyor hem de kodlama hatalarına karşı bizi koruyor. Peki nedir bu X makrosu?
Örnek olarak listemizde birden fazla yerde kullanacağımız renkler olsun. Başlangıçta renklerimizin WHITE, YELLOW, GRAY ve MAGENTA olduğunu düşünelim. Aşağıdaki koda bakalım:

Makromuzu tek satır halinde de yazabilirdik. Ancak okunması daha kolay olsun diye listenin her bir öğesini ayrı bir satıra yazmayı tercih ettik. Makromuzun alt satırdan devam edebilmesi için ters bölü (\) karakterinin kullanılması gerektiğini biliyorsunuz. Listemizdeki her bir ismin X‘i izleyen bir parantez içine alındığını görüyorsunuz. Şimdi bu isimlerle bir numaralandırma (enum) türü oluşturuyoruz:

Önişlemci programı XCOLORS makrosunu açınca ne olacak?

Şimdi de önişlemci programımız X isimli işlevsel makroyu açacak. Makro açılım listesinde a‘nın geçtiği yerlerde bizim renklerimiz kullanılacak, değil mi?

En son numaralandırma sabitinden sonra yer alan virgül (trailing comma) bir sentaks hatasına neden olmuyor. Burada X işlevsel makrosunun

önişlemci komutuyla tanımının ortadan kaldırılması son derece önemli. Zira başka yerlerde bu makroyu faklı biçimlerde tanımlayacağız. X makrosununun tanımını ortadan kaldırmasaydık tanımsız davranışa (undefined behavior) neden olurduk. Şimdi de başka bir yerde bu kez bir gösterici dizisi tanımlayalım:

standart makro işleci #‘in (stringizing) terimi olan yazıyı çift tırnak içine aldığını hatırlayalım.
Sırada bir switch deyimi var:

Makromuzu kullanmasaydık, renk listemize yeni bir renk eklendiğinde ya da renk listemizde bir değişiklik yapıldığında birçok yerde değişiklik yapmamız gerekecekti. XCOLORS makrosunu değiştirip kodu yeniden derlediğimizde bu makronun geçtiği her yer değişmiş olacak, değil mi?

XCOLORS makrosunu ayrı bir dosyaya almak kodların bakımını kolaylaştıracak. XCOLORS makrosunun “colors.def” isimli dosyada bulunduğunu düşünelim:

XCOLORS makrosunu içeren başlık dosyasında koşullu derleme komutlarıyla renk listemiz duruma göre farklı şekilde biçimlendirilebilir:

X makrosu ilk olarak 1960’lı yılların sonunda o zamanki bilgisayar kuşağı DEC PDP‘lerin işletim sistemlerinin yazımında assembly dillerde etkin olarak kullanılmış. Zaman içinde unutulmaya yüz tutmuş bu faydalı tekniğin kullanımına siz de bir destek verin.

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