Derleyici Direktifler (Compiler Directives)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
a.mikayil
Üye
Mesajlar: 83
Kayıt: 07 Ağu 2010 01:55

Derleyici Direktifler (Compiler Directives)

Mesaj gönderen a.mikayil »

Değerli arkadaşlar. Ta Delphi'yi ilk kullanmaya başladığım zamandan beri bir türlü anlayamadığım konu

Kod: Tümünü seç

{$IFDEF}
şeklinde yazılan compiler dırectivler. Google'da hep aradım ne için kullanıldiğını ama her kes ortadan anlatıyor. Yani şöyle kelimenin tam anlamında açıklayana rastlamadım. Lüfen bu konuyu bana anlatır mısınız? Ne için kullanırız, tüm compiler directive leri ezbere bilmemiz mi gerekiyor, kendimiz yenilerini tanımlayabilir miyiz?
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Derleyici Direktifler (Compiler Directives)

Mesaj gönderen vkamadan »

Merhaba ,
Özetle ve basit bir örnekle açıklamaya çalışayım ,
Derleyici direktifleri, derleyicinin yazdığınız kodların derlemesi esnasında dikkat edeceği ekstra kuralları tanımlamanıza olanak sağlar , örneğin delphi de oluşturduğunuz tüm form unitlerinin implementation kısmında {$R *.dfm} direktifi yer alır anlamı proje klasöründe ki uzantısı DFM olan dosyaları EXe nin içine resource olarak ekle demektir, daha açıklayıcı olması için Define ,IFDef , IfNDef direktiflerinin çalışmasına basit bir örnek vereyim , projenizde bazı prosedür yada fonksiyonların içinde geliştirme aşamasında test amaçlı kendinize bazı mesajlar vermek istiyorsunuz (Hesap Ekle prosedürü çalıştı.. , hesap kodu bulunamadığından yeni hesap oluşturuluyor.. vb...)

Kod: Tümünü seç

procedure IslemYap;
begin
  ..
  //prosedür kodları ..
  ..

  {$IFDef TEST-DERLEMESI}
    ShowMessage('Islem yap prosedürü çalıştı..');
  {$EndIf}

end;
böyle bir kodu derlediğinizde IfDef ve EndIf direktifleri arasında yazdığınız kodlar derlemeye dahil edilmez derleyici sanki bu kod hiç yazılmamış gibi davranır, fakat unit içinde bu direktiften daha önce olan herhangi bir yere (okunabilirliği arttırmak için interface kısmına tanımlamanızı öneririm)

Kod: Tümünü seç

{$Define  TEST-DERLEMESI}
şeklinde bir direktif eklerseniz az önce bahsettiğimiz ifDef ve EndIf arasındaki yazdığınız kodlarda derlemeye dahil edilir, yukarıdaki örnekte derleyiciye "eğer TEST-DERLEMESI adında bir belirteç tanımlandıysa bu kodlarıda derlemeye dahil et" komudu verdik, projenizde derleme durumuna göre dahil edilip edilmemesini istediğiniz kodlar olduğunda IfDef direktifine başvurabilirsiniz.
Derleyici direktifleri hakkında daha fazla bilgi için http://www.delphibasics.co.uk/ByType.as ... 0Directive adresine başvurabilirsiniz.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
a.mikayil
Üye
Mesajlar: 83
Kayıt: 07 Ağu 2010 01:55

Re: Derleyici Direktifler (Compiler Directives)

Mesaj gönderen a.mikayil »

Öncelikle bu kadar zamanınızı ayırıp da beni mahçup ettiğiniz için teşekkür ederim. Gerçekten güzel bir anlatım. O zaman ben de anladığımı onaylamanız için bir soru sorayım. Diyelim büyük bir prosedür yazdım. Birinci müşteri için bu prosedür çalışmalı, ikinci içinse çalışmamlı. Ben birinci müşteri için programı derlediğimde interface bölümünde o direktivi tanımlıyıp, ikincide ise tanımlamadan derlemem gerek, öyle mi?
İstikrar sürsün, Türkiye'm büyüsün inşallah.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Derleyici Direktifler (Compiler Directives)

Mesaj gönderen vkamadan »

a.mikayil yazdı:Öncelikle bu kadar zamanınızı ayırıp da beni mahçup ettiğiniz için teşekkür ederim. Gerçekten güzel bir anlatım. O zaman ben de anladığımı onaylamanız için bir soru sorayım. Diyelim büyük bir prosedür yazdım. Birinci müşteri için bu prosedür çalışmalı, ikinci içinse çalışmamlı. Ben birinci müşteri için programı derlediğimde interface bölümünde o direktivi tanımlıyıp, ikincide ise tanımlamadan derlemem gerek, öyle mi?
Evet kesinlikle doğru anlamışsınız, ifDef deki şart gerçekleşmediği sürece ilgili blok derlemeye dahil edilmez, yeri gelmişken "ifNdef" ise ilgili belirteç tanımlı değilse derlemeye dahil eder yani ifDef in değilidir.

İyi çalışmalar dilerim.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Derleyici Direktifler (Compiler Directives)

Mesaj gönderen sabanakman »

Başka bir ip ucu ..: DelphiVersiyonu fonksiyonunu yazıp "ShowMessage(DelphiVersiyonu)" şeklinde deneyebilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla