C#nedir?com
 
YAZAR HAKKINDA
emre TAŞ
emre TAŞ
www.emretas.net
İletişme geçmek için tıklayın.
7 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: #define #ıfdef #Include #pragma #Undef c'de makrolar direktifler else endif if örnekler C / Sys Prog. emre TAŞ
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 22.9.2010
Okunma Sayısı : 36188
Yorum Sayısı : 6     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
ChatBot UI Sample 21.10.2017
Turhal Temizer 'in Blogu
C# – IRR Function 21.10.2017
Burak Selim Şenyurt
Asp.Net Core'da Bir WebSocket Macerası 21.10.2017
Burak Selim Şenyurt
.NET Core 2.0 ile Basit Bir Web API Geliştirmek 21.10.2017
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C' de Makrolar
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon

C’de makrolar

Makro direktifleri derleme-öncesi komutlarıdır. Bunlar tipik olarak kaynak kodları değiştirmek, programı farklı donanımlarda kolaylıkla çalıştırabilmek, programın parçalarını kaynak programda birleştirmek ve derleme sırasındaki bazı uyarı mesajlarını aktif veya pasif hale getirmek için kullanılırlar.
C’de kullanılar direktifler şöyledir:
#Include
#Define
#Pragma
#Line
#Error
#Undef
#Ifdef
#Ifndef
#If
#Else
#Elif
#Endif

1. #Include Direktifi
Bu direktif, verilen dosyanın içeriğini, kullanıldığı yerde kaynak dosyanın içine ekler. Çoğunlukla derleyiciye ait komut kütüphanelerinde bulunan fonksiyonların prototiplerinin (fonksiyon başlık kısımlarının) ve diğer çeşit tanımlamalarının bulunduğu (H uzantılı) BAŞLIK dosyalarının programa dahil edilmesinde kullanılır. Direktif iki şekilde kullanılabilir:

#Include<DosyaIsmi.H>

#Include “DosyaIsmi.H”


Birinci kullanımda dosyanın nerede bulunduğu derleyici için verilen ulaşım yolu (path) ile belirlenir. Bu ulaşım yolu genellikle

INCLUDE dizini ile son bulur. İkinci kullanımda ise dosyanın bulunduğu yer aktif dizin olarak kabul edilir.

2. #Define Direktifi
Kaynak dosyada bir isim yerine başka bir ismin yer değiştirilmesini sağlar.
 

#Define BEGIN {
#Define END }
#Define YAZ printf
#Define MESAJ “Hello Earth.”
#Define PROGRAM main( )

 

PROGRAM
BEGIN
YAZ(MESAJ) ;

 

Yukarıdaki program derleme işleminden evvel define ile verilen isimler yerine ikinci isimler yerleştirildikten sonra program aşağıdaki duruma gelir.
 

Main( )
{
Intf(“Hello Earth.”) ;
 


Bu direktifi kullanarak sembolik program sabitlerini tanımlamakta mümkündür. Örneğin;
 


#Define PI 3.1415

 

#Define A 0.15454

#Define C A*P I

Main( )

{

Float x,y ;

x = 2 * P I

y = C / 2 . 0 ;

}

Bu programda P I görüldüğü yere 3.1415, A yerine 0.15454 ve C yerine A* P I konur, ve program aşağıdaki gibi derlenir:


Main ( )
{
Float x,y ;

 

x = 2*3.1415
y = 0.15454*3.1415 / 2 . 0 ;

}
 

Burada dikkat edilmesi gereken bir husus vardır, bunu aşağıdaki örnekte görebiliriz :


#Define A 2
#Define B 7
#Define C A+B

 

Main ( )

{

Int x ;

x = 2 * C ;

Printf ( “ % d \ n ” , x ) ;

}
 

Burada x’in değerinin ne olacağını düşünelim. Görünüş olarak x,18 değerine sahip oluyor gibi gözükmektedir. Şimdi tanımlanan makro sabitlerinin programda nasıl yerleştirildiğini inceleyelim.Önce tanımlanan C Makrosunda A ve B yerine 2 ve 7 sayıları konur ve C aşağıdaki duruma gelir.

#Define C 2 + 7
 

 

Dikkat edilecek olursa makronun görevi sadece bir isim yerine başka bir isim koymaktır, bu esnada hesaplama yapılmaz . Yani C makrosu, 9 olarak ele alınmaz. Şimdi C’yi programda yerine koyarsak;

x = 2 * 2 + 7

durumuna gelir ve sonuç 11 olur. Eğer 2 + 7 ‘nin iki katı alınması düşünüldü ise bu durumda C makrosu

#Define C ( A + B )

Şeklinde tanımlamak gereklidir. Define makrosuna güzel bir örnek aşağıda verilmiştir. Aşağıdaki programda sonucun M / SN cinsinden çıkması isteniyor, fakat kullanılan veriler Km ve Saat’tir.

#Define km * 1000.0
#Define Saat * 3600.0

 

Main ( )
{

Float yol, zaman , hiz ;

yol = 2 . 5 km ;
zaman = 3.2 saat ;

hiz = yol \ zaman ;

printf ( “ Hiz = %f m / sn” , hiz ) ;

}
 

 

Yukarıdaki örnekte yol = 2.5 km ; ifadesindeki km makrosu yerine konduktan sonra durum yol= 2.5 * 1000 . 0 olacaktır. Yani km olarak verilen değer metreye çevrilmiş olacaktır. Benzer durum zaman için de geçerlidir. Sonuçta elde edilen hız değeri m / sn biriminde olacaktır. Define makrosu ile parametrik tanımlamalar da yapmak mümkündür.

Örneğin;

#Define kare(x) ( (x) * (x) )
#Define carp (x . y) (x * y)
#Define yaz( mesaj ) printf ( mesaj ) ;

 

Main ( )

{

Float t, a , b;
T = 3 . 6 ;
b = 4 ;
a = kare ( 3 ) + carp ( t , b ) ;
printf ( “Sonuc =%f” a ) ;
yaz ( “ islem tamam”) ;

Burada a = kare (3) + carp ( t , b ) ; ifadesi makroların işlenmesinden sonra

a = ( ( 3 ) * ( 3) ) + (3.6 * 4 ) ; Haline gelir.

3. #Pragma Direktifi
Pragma direktifi iki şekilde kullanılır. #pragma inline Direktifi derleyiciye program içinde Assembler dil kodlarının bulunduğunu bildirir. İkinci kullanımda #Pragma warn -Uyari_Ismi Direktifi, programın derlenmesi aşamasında ismi verilen uyarıların dikkate alınmasını sağlar. Uyarı isimlerinden bazıları ve anlamları aşağıda verilmiştir.

Uyarı Ismi Anlamı

 


Big çok büyük onaltılık veya sekizlik sabit sayı
Dup ismin tekrar tanımlanmasında farklılık
Ret hem Return komutu hemde bir değerin geri dönüşü var
Str verilen isim bir yapının parçası değil
Stu tanımlanmamış isim yapısı
Sus şüpheli pointer dönüşümü
Voi Void fonksiyonlar bir değer gönderemez
Zst sıfır uzunluktaki yapı
Aus hiç kullanılmayan bir değer atandı.
Def tanımlanmadan önce ismin kullanımı mümkün değil
Eff etkisiz ifade
Par ilgili parametre hiçbir zaman kullanılamaz
Pia yanlış atama ihtimali
Rch ulaşılamayan kod
Rvi fonksiyonun bir değer göndermesi gerekir
Amb operatörler parantezlerle kullanılmazlar.
Amp & adres operatörünün gereksiz kullanımı
Nod fonksiyon için bir bildiri yok
Pro prototipsiz fonksiyon kullanımı
Stv yapısal değerin bir değer olarak geçişi
Use hiçbir zaman kullanılmayan bildiri
Apt uygunsuz pointer ataması
Cln çok büyük sabit bir değer
Cpt uygunsuz pointer karşılaştırması
Rng karşılaştırmada sabit aralığın dışında
Sig dönüşümde önemli basamaklar kaybolabilir.
 


4. #Undef Direktifi
#Define ile tanımlanan bir isim, orijinal tanımlamaları kaldırılmaksızın farklı değerler için tekrar tanımlanamazlar. Eğer #Define tanımlanan ifade başka bir değer ile tekrar tanımlanmak istenirse, ya program içinde #define ile tanımlanan ifade kaldırılıp yerine yenisi yazılır ya da #Undef direktifi ile önceki tanımlama iptal edildikten sonra #Define ile tekrar yenisi tanımlanır.



#Define X 1001 - - - - - - - > İlk tanımlama
.
.
.
#Undef X - - - - - - - - > ilk tanımlamanın iptali

 

#Define X 7878 - - - - - - - - - > Yeni tanımlama
 


5. # If , #Elif , #Else , ve #EndIf Direktifleri
Makro düzeyde tanımlanan bu direktiflerin kullanımı aynı if ve else ifadelerinin kullanımı gibidir. Bu makro kontrol ifadeleri donanıma ve işletim sistemine uygun olarak değişik makroların veya ifadelerin geçerli olmasını sağlar.

#If ifade
Tanımlama Blogu
#Elif ifade
Tanimlama Blogu
.
.
.
#Else ifade
Tanımlama blogu
#EndIf

Burada #elif makrosu else if’e karşılık gelmekte ve #Endif makrosu ise #if ‘in sonunu göstermektedir.
 

#if (sizeof ( int ) = =2 )
#define MAKINA “16 bitlik isletim sistemi”
#Else
#define MAKINA “32 bitlik isletim sistemi”
#Endif

 

Main ( )
{
Printf ( MAKINA ) ;
}

Bu makroların kullanımına en iyi örnekler mevcut BAŞLIK (* .H ) dosyalarındakiler verilebilir.
 

6. #Ifdef ve #Ifndef Direktifi
#Ifdef makrosu, bir ismin tanımlanmış olup olmadığının, #Indef makrosu ise bir ismin tanımlanmamış olup olmadığının belirlenmesinde kullanılır.

#Ifndef SIFRE
#define SIFRE “6254 – 365 – 23”
 


Bu örnekte eğer SIFRE ismi daha evvelce tanımlanmadı ise verilen değerlerle tanımlı hale getirilir.

 

7.#Line Direktifi:
Bu direktif derleyicinin içte sakladığı satır numarası ve dosya ismini işlenen satır numarası ve dosya ismine çevirir. Derleyici satır numarası ve dosya ismini, eğer bir hata varsa bu hatanın hangi dosyada ve kaçıncı satırda olduğunu göstermek için kullanılır. Satır numarası , islenen her satır sonunda bir artırılır. Bu direktifi genellikle derleyici kendisi kullanır.

8. #Error Direktifi
Bu direktif makro komutların işleyişi sırasında bir uyuşmazlık olduğunda programın derleme aşamasına geçmesini engelleyerek, işlemi durdurur. Örneğin yazdığınız program 32 bit’lik bir işletim sistemi için(UNIX gibi) dizayn edildi ise ve 16bit’lik işletim sistemlerinde(örneğin MS-DOS) çalıştırılmaması gerekiyorsa, izleyen direktif program başına eklenebilir.
 

#if (size of ( int ) = = 2 )

 

#Error bu program ( 16 bit’lik ) bu işletim sisteminde çalışmaz !

#Endif
 

Böylece C'de makrolar konusunu bitirmiş olduk . Eğer herhangi bir sorun yaşarsanız makaleye yorum olarak yazınız, sorununuzu paylaşabilirsiniz. Umarım faydalı olmuştur. Herkese faydalı olmasını dilerim.
 

Makale:
C' de Makrolar C ve Sistem Programlama emre TAŞ
  • Yazılan Yorumlar
  • Yorum Yaz
TEM
25
2013
sa kardolar
TEM
22
2013
sa
TEM
22
2013
sa
TEM
22
2013
sa
TEM
22
2013
sa
MAY
19
2011
çok teşekkür ederim hocam
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor