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.
#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.