C - #define Ile Makro Tanimlanmasi.

blink1337dagger

Kadim Üye
7 Kas 2011
5,261
43
Chicago İL
Karakter dizileri icin takma isimler tanimlamak icin #define emri kullanilabilir. #define emri C'de assagidaki gibi kullanilir:

#define takmaisim degistirmedizisi

Bunlari daha iyi anlamak icin basit bir ornek yazalim:

Kod:
#include <stdio.h>
#define pi 3.14 /* #define ile pi tanimlamasina 3.14 degeri ataniyor. */
**** main()
{
printf("Pi sayisi: %f 'dur",pi); /* #define ile tanimlanan pi degeri yazdiriliyor. */
}
Yani program icinde tanimlanan bir pi degerine deger atanabilecegi gibi, #define kullanilarakta bir deger tanimlanabilir ve buna deger atanabilir. Genellikle ornekteki gibi basit islemlerde kullanilmaz.

Ayni sekilde degismezlerin tanimlanmasi gibi ifadelerde tanimlanabilir. Yani program icinde tanimlanan bir denklem, #define ilede tanimlanabilir. Yukaridaki ornekte sadece pi sayisini tanimlamistik, simdi cemberin cevresini hesaplayan denklemi #define ile tanimlayalim:


Kod:
#include <stdio.h>
#define pi 3.14 /* Pi sayisi 3.14 olarak tanimlaniyor. */
#define cevre 2*pi*yaricap /* Cemberin cevresi 2*pi*r olarak tanimlaniyor. */
**** main()
{
int yaricap;
printf("Cemberin yaricapini girin:");
scanf("%d",&yaricap);
printf("Cemberin cevresi: %3.2f",cevre);
}
#define ile deyimlerinde isimleri degistirilebilir. Bildigimiz printf, scanf gibi fonksiyonlarin isimleri yazdir, okut gibi Turkce tanimlanabilir. Ornekte daha iyi gorebiliriz, basit bir ornek yazalim:

Kod:
#include <stdio.h>
#define oku scanf
#define yaz printf
**** main()
{
int sayi;
yaz("Printf fonksiyonu yaz olarak tanimlaniyor, bu yazi yazdiriliyor\n");
yaz("Bir sayi girin:");
oku("%d",&sayi);
yaz("Girdiginiz sayi: %d",sayi);
}
Parametre kullanilmasida gerekebilir, bunlar parantez icinde kullanilmalidir. Parantez icinde tanimlanan degerlere yine makro icinde bir formul belirtilmelidir. Basit bir ornek; hacim hesabi yapan bir program yazalim:

Kod:
#include <stdio.h>
#define hacim(x1,x2,x3)\
((x1)*(x2)*(x3))
/* hacim ve parametreler tanimlaniyor, sonuna \ koyuluyor. */
/* \ isaretinden sonra gelen tanim ise formulu belirler, yani bu makroyla bu islem yapilir. */
**** main()
{
/* En, boy ve yukseklik verileri tanimlaniyor. Kullanicidan da istenebilir, ugrasmayalim... */
int en=5;
int boy=4;
int yuksek=2;
/* Girilen verilere gore hacim hesaplamasi yapilacak. */
printf("Hacim: %d",hacim(en,boy,yuksek));
/* hacim tanimlamasi cagiriliyor, makroda 3 veri tanimlandigi icin hacim icinde 3 veri araniyor. hacim(en,boy,yuksek) */
/* tanimlamasinda en x1, boy x2, yuksek ise x3 degerinin yerine geciyor. Tanimlanan formulde ise bu 3 verinin carpiminin */
/* hacmi verdigi yer aliyor. Bu 3 veri carpilip ekrana yaziliyor. */
}
Makro gerekli goruldugunde iptal edilebilir; #undef emri makroyu iptal eder. Iptal edilen makro tekrar tanimlanabilir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.