Önişlemci Komutları :
#include
#define
#ifdef
#ifndef
#
##
#if
#else
#endif
#undef
#line
#include Önişlemci Komutu :
Bu komut basitçe kopyala yapıştır olarak değerlendirilebilir. < > yada " " arasındaki başlık(header) dosyalarınızı yazıdğınız dosyaya dahil eder. .h dosyasının tamamını alarak sayfanıza yapıştırır böylece başlık dosyasındaki fonksiyon protoriplerine, define bildirimlerine erişebilirsiniz.
#define Önişlemci Komutu :
Bu komut basitce bul değiştir işlemini gerçekleştirir. Kullanımı şu şekildedir.
#define MAX 100
Burada önişlemci program MAX gördüğü yere 100 sabitini yazar. Bu sayede derleyici MAX yazısını yerine 100 sayısını görür. Bu sabitlere sembolik sabit adı verilmektedir. Bir kaç kez kullanılan sabitler bu şekilde kullanılırsa değişiklik kolay olur.
#define önişlemci komutu sadece sabitler için kullanılmak zorunda değildir.
#define WORD char * //typedef - using(C++11) gibi kullanmak "tercih edilmez!". #define str(x) "x" //Makro gibi kullanmak
Bu kullanımlar dışında bir çok kullanımı vardır. Makro olarak kullanımı başka bir yazımızda anlatılmıştır.(bkz.) typedef derleyicinin gördüğü bir anahtar sözcüktür.
#define sadece atomları değiştirir örneğin MAX_SIZE 'daki MAX #define edilse dahi 100 ile değiştirilmez.
Anahtar Not : Önişlemci sadece yerdeğiştirme işlemini yapar define içersindeki işlemleri yapmaz!
#define SIZE 20+30
SIZE yerine 20+30 yazar 50 yazmaz.
# ve ## Önişelmci Operatörleri:
# operatörü genelde makrolarda kullanılır ve unary prefix bir operatördür. Önüne geldiği atomu string olarak yazar. Bir örnekle anlatmak daha rahat olacak.
#define string(a) #a
int main(){ printf(string(guven)); } burada aslında printf("guven"); yazmış olduk yani #a string(a)'daki a 'yı tırnak içinde yazdı.
## operatörü ise atomları birleştirme operatörüdür. Binary infix olarak kullanılır. Soluna ve sağına gelen atomları birleştirir. Örnek üzerinde anlatırsak.
#define birlestir(a,b) a##b
int main(){ birlestir(say,ac)++; } dememiz ile
int main(){ sayac++ } dememiz aynı anlama geliyor artık her ne kadar saçma
bir örnekte olsa mantığını kavradıysak güzel yerlerde bu özelliği kullanabiliriz.
KOŞULLU DERLEME
#if #else #elif #endif Önişlemci Komutları:
Bu komutlar koşullu derlemede kullanılır. Kodun bir kısmının derlenmesi için bir koşul koymak istiyorsanız bu özellik tam sizin için. #if #else #elif zaten programlamadan bildiğimiz if ile else, elseif. Bunlar diğer if else ile aynı mantıkta çalışıyorlar. Fakat #if 'imizin koşul kısmına koyduklarımızda bazı kısıtlamalar mevcut tabi ki. #if 'in koşul kısmına sadece tamsayı ve değişmez ifadeleri kullanabiliyoruz. #define ile tanımladığımız ifadeleri kullanabiliyoruz. Örnekler ile anlatalım.
#if 1
/****buradaki kod çalışır***/
#endif
#if 0
/***buradaki kod derlenmez****/
#endif
Bu if'in nasıl kullanıldığı hakkındaydı. Birde nasıl koşullar koyabilir onlara bakalım. #if'imizin koşul kısmında bitsel operatörler, karşılaştırma operatörleri, aritmetik operatörler kullanılmasında bir sakınca yoktur. Örneğin;
#define MAX 300
#if MAX < 100
/***** Buradaki kod derlenmez***********/
#else if MAX > 200
/*********Burası derlenir************/
#else
/*********Burası derlenmez*******/
#endif
#ifndef #ifdef #undef Komutları:
Bu komutlar define edilip edilmemesine göre derleme yapmaya yarar. Yani bir define işlemi yapılırsa bunu derleme ya da derle olarak kullanırız bu komutları. Bu sarmalama başlık dosyalarının iki kez bildirilmemesi için kullanılır. Örnek bir kullanım yaparsak.
İnclude Guard : Bir başlık dosyasının birden fazla kez include edilmesinde oluşacak hataları engellemek için yapılan çalışma.
#ifndef __STDIO_H
#define __STDIO_H
/****burada eğer ikinci kez bu koda gelirse define işlemi önceden yapıldığından bu koda girmez**/
#endif
- #undef ise önceden define edilmiş bir ismin tanımlanmasını iptal eder (undefined).
#define MAX 100
/***MAX tanımlı**/
#undef MAX
/***Artık MAX kullanılamaz***/
- Son olarak #error önişlemci komutu ise programı daha derlemeye başlamadan önişlemcide durdurup hata yazdırmasına yarar. Bu şu şekilde kullanılabilir.
#ifndef __STDC__
#error Bu Kod Sadece C derleyicisi İçin Geçerli
#endif
!Burada __STDC__ C derleyicilerinde tanımlı olan bir simgesel değişmezdir. Standart C derleyicisi ise bu değişmez 1 olarak tanımlıdır.
Hiç yorum yok:
Yorum Gönder