![]() |
![]() |
![]() |
||||||||||||||||||||||||||||||
|
C++ | BİLDİRİM VE TANIMLAMALAR Progamlama dillerinin çoğunda nesneler kullanılmadan önceye derleyiciye tanıtılırlar.
Nesnelerin kullanılmalarından önce, özellikleri hakkında derleyiciye bilgi verme işlemlerine bildirim (declaration) denir. Bildirim işlemi yoluyla, derleyiciler nesnelerin hangi özelliklere sahip olduklarını anlarlar ve böylece bu nesneler için bellekte uygun bir yer tahsisatı yapabilirler. Yaratılacak nesne hakkında derleyiciye verilecek en önemli bilgi şüphesiz nesneye ilişkin tür (type) bilgisidir. C dilinde eğer yapılan bir bildirim işlemi, derleyicinin bellekte bir yer ayırmasına neden oluyorsa bu işleme tanımlama (definition) denir. Tanımlama nesne yaratan bir bildirimdir. Her tanımlama işlem aynı zamanda bir bildirim işlemidir ama her bildirim işlemi bir tanımlama olmayabilir. Başka bir deyişle, tanımlama nesne yaratan bir bildirim işlemidir. C dilinde bir değişkeni bildirimini yapmadan önce kullanmak derleme işleminde hata (error) oluşumuna yol açar. Bir değişkenin derleyiciye tanıtılması değişkenin türünün ve isminin derleyiciye bildirilmesidir ki, derleyici bu bilgiye dayanarak değişken için bellekte ne kadar yer ayıracağını, değişkenin için ayrılan byte'lardaki 1 ve 0 ların nasıl yorumlanacağı bilgisini elde eder. C Dilinde Bildirim İşleminin Genel Biçimi C programlama Dili'nde bildirim işlemi aşağıdaki şekilde yapılmaktadır : <tür> <nesne ismi> <;> Burada noktalı virgül karakterine sonlandırıcı karakter diyoruz. Noktalı virgül ayıraç türünden bir atomdur ve C'de bütün ifadeler noktalı virgül ile birbirlerinden ayrılırlar. a = x + 1; b = x + 2; ifadelerinde bulunan noktalı virgüller bunların ayrı birer ifade olduklarını gösterirler. Eğer bir tek noktalı virgül olsaydı derleyici iki ifadeyi tek bir ifade gibi yorumlayacaktı. a = x + 1 b = x + 2; Yukarıdaki ifade tek bir ifade gibi yorumlanır ve derleyici buna bir anlam veremez. Tür belirten anahtar sözcükler, C dilinin önceden tanımlanmış veri türlerine ilişkin anahtar sözcüklerdir. Bu sözcükleri bildirim sentaksında kullanarak, daha önce öğrenmiş olduğumuz 11 temel veri türünden hangisinden değişken tanımlamak istediğimizi derleyiciye bildirmiş oluyoruz. C dilinin önceden tanımlanmış veri türlerine ilişkin, bilidirim işleminde kullanılabilecek anahtar sözcükler şunlardır : signed, unsigned, char, short, int, long, float, double Bu sözcüklerin hepsi anahtar sözcük olduğundan küçük harf ile yazılmalıdır, C dilinin büyük harf küçük har duyarlı (case sensitive) bir dil olduğunu hatırlayalım. C dilinin tüm anahtar sözcükleri küçük harf ile tanımlanmıştır. Tür belirten anahtar sözcükler aşağıdaki tabloda listelenen seçeneklerden biri olmalıdır. Köşeli parantez içerisindeki ifadeler kullanılması zorunlu olmayan, yani seçime bağlı olan anahtar sözcükleri göstermektedir. Aynı satırdaki tür belirten anahtar sözcükler tamamen aynı anlamda kullanılabilmektedir. 1 char [signed ] char 2 unsigned char 3 short [signed] short short [int] [signed] short [int] 4 unsigned short 5 int [signed] int signed 6 unsigned int unsigned 7 long [signed] long long [int] [signed] long [int] 8 unsigned long unsigned long [int] 9 float 10 double 11 long double Yukarıdaki tablodan da görüldüğü gibi, belirli türleri birden fazla şekilde ifade etmek mümkündür. char a; int a; long a; signed char a; signed int a; long int a; signed a; signed long a; signed long int a; Yukarıda aynı kolon üzerindeki bildirimlerin hepsi aynı türden nesne yaratır. Bildirim işleminde nesne ismi olarak, C dilinin isimlendirme kurallarına uygun olarak seçilen herhangi bir isim kullanılabilir. C dilinde isimlendirilenler (identifiers) kavramı 6 grubu içerir. Değişkenler (variable) bunlardan yalnızca bir tanesidir. Fonksiyonlar (functions), etiketler (labels), makrolar (macros), yapı ve birlik isimleri (structure and union tags), enum sabitleri (enum constants) isimlerini programcılardan alırlar. C Dilinin İsimlendirme Kuralları İsimlendirmede yalnızca 63 karakter kullanılabilir. Bunlar: İngiliz alfabesinde yer alan 26 karakter, (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z) rakam karakterleri (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) ve alttire (underscore) karakteridir. (_) İsimlendirmelerde yukarıda belirtilen karakterlerin dışında başka bir karakterin kullanılması derleme zamanında hata oluşumuna yol açar. (ömeğin boşluk karakterinin kullanılması Türkçe karakterlerin kullanılması, +, -, /, *, & ya da $ karakterinin kullanılması gibi). Değişken isimleri rakam karakteriyle başlayamaz. Rakam karakteri dışında, yukarıda geçerli herhangi bir karakterle başlayabilir. C'nin anahtar sözcükleri isimlendirme amacı ile kullanılamaz. İsimler boşluk içeremeyeceği için uygulamalarda genellikle boşluk hissi vermek için alttire (underscore) karakteri kullanılır. genel_katsayi_farki, square_total, number_of_cards gibi. Başka bir teknik de isimlendirmede her sözcüğün ilk harfini Büyük, diğer harfleri küçük yazmaktır. GenelKatsayiFarki, SquareTotal, NumberOfCards gibi. C dilinde yapılan isimlendirmelerde, isimlerin maksimum uzunluğu tanımlanmamıştır. Bu derleyicilere göre değişebilir. Ancak bir çok derleyicide 32 sayısı kullanılmaktadır. Eğer verilen isim 32 karakterden daha fazla karakter içeriyorsa, derleyici bu ismi budar, yani yalnızca ilk 32 karakterini algılar. C dili büyük harf küçük harf duyarlığı olan bir dil olduğu için (case sensitive) isimlendirmelerde de büyük harf ve küçük harfler farklı karakterler olarak ele alınacaktır : var, Var, VAr, VAR, vAR, vaR değişkelerinin hepsi ayrı değişkenler olarak ele alınacaktır. Bu noktaların hepsi C dilinin sentaksı açısından, hata oluşumunu engellemek için zorunlu durumları belirtmek için anlatılmıştır. İsimlendirme yazılan programların okunabilirliği açısından da çok önemlidir. Kullanılan isimlerin legal olmalarının dışında, anlamlı olmalarına, kodu okuyacak kişiye bir fikir verecek şekilde seçilmelerine de dikkat edilmelidir. Bildirim işlemi noktalı virgül ile sonlandırılmalıdır. Bildirim Örnekleri int x; unsigned long int var; double MFCS; unsigned _result; signed short total; Tür belirten anahtar sözcüklerin yazılmasından sonra aynı türe ilişkin birden fazla nesnenin bildirimi, isimleri arasına virgül koyularak yapılabilir. Bildirim deyimi yine noktalı virgül ile sonlandırılmalıdır. unsigned char ch1, ch2, ch3, ch4; float FL1, Fl2; unsigned total, subtotal; int _vergi_katsayisi, vergi_matrahi; Farklı türlere ilişkin bildirimler virgüllerle birbirinden ayrılamaz. long x, int y; /* error */ signed ve unsigned sözcükleri tür belirten anahtar sözcük(ler) olmadan yalnız başlarına kullanılabilirler. Bu durumda int türden bir değişkenin bildiriminin yapıldığı kabul edilir: signed x, y; ile signed int x, y; tamamen aynı anlamdadır. Yine unsigned u; ile unsigned int u; tamamen aynı anlamdadır. Ancak bu tür bir bildirimi tavsiye etmiyoruz, standartlar komitesi ileride bu özelliğin dilin kurallarından kaldırılabileceğini bildirmiştir. (deprecated feature). Bildirim işleminde, tür belirten anahtar sözcük birden fazla ise bunların yazım sırası önemli değildir, ama okunabilirlik açısından önce işaret belirten anahtar sözcüğün sonra tip belirten anahtar sözcüğün kullanılması gelenek haline gelmiştir. Örneğin : signed long int x; signed int long x; long signed int x; long int signed x; int long signed x; int signed long x; hepsi geçerli bildirimlerdir. Ama yukarıdaki bildirimde, seçimlik olan anahtar sözcükler özellikle kullanılmak isteniyorsa 1. yazım biçimi okunabilirlik açısından tercih edilmelidir. Bildirimlerin Kaynak Kod İçinde Yapılış Yerleri C dilinde genel olarak 3 yerde bildirim yapılabilir : 1. Blokların içinde 2. Tüm blokların dışında. 3. Fonksiyon parametre değişkeni olarak fonksiyon parantezlerinin içerisinde Fonksiyon parametre parantezleri içerisinde yapılan bildirimler, başka bir sentaks kuralına uyarlar, bu bildirimler fonksiyonlar konusuna gelindiğinde detaylı olarak incelenecektir. C dilinde eğer bildirim blokların içinde yapılacaksa, bildirim işlemi blokların ilk işlemi olmak zorundadır. Başka bir deyişle bildirimlerden önce başka bir ifade bulunmamalı ya da bildirimden önce bir fonksiyon çağırılmamalıdır. (Aksi halde derleme zamanı sırasında hata oluşur.) Bildirimin mutlaka ana bloğun başında yapılması gibi bir zorunluluk yoktur. Eğer içiçe bloklar varsa içteki herhangi bir bloğun başında da (o bloğun ilk işlemi olacak şekilde) bildirim yapılabilir. Örnekler : { int var1, var2; char ch1, ch2, ch3; var1 = 10; float f; /* error */ } Yukarıdaki örnekte var1, var2, ch1, ch2, ch3 değişkenlerinin tanımlanma yerleri doğrudur. Ancak f değişkeni yanlış yerde bildirilmiştir. Çünkü bildirim işleminden önce başka bir işlem (deyim) yer almaktadır. Bu durum derleme aşamasında hata oluşumuna neden olur. Aynı program parçası şu şekilde yazılmış olsaydı bir hata söz konusu olmazdı : { int var1, var2; char ch1, ch2, ch3; var1 = 10; { float f; } } bu durumda artık f değişkeni de kendi bloğunun başında (ilk işlem olarak) tanımlanmıştır. İleride de göreceğimiz gibi C dilinde tek başına bir noktalı virgül, bir deyim oluşturur. C sentaksına göre oluşan bu deyim icra edilebilir bir deyimdir. Dolayısıyla aşağıdaki kod parçasında y değişkeninin tanımlaması derleme zamanında hata oluşturacaktır. { int x;; int y; /* hata! ikinci sonlandırıcı atom icra edilebilir bir deyim olarak ele alınıyor. */ } Aynı şekilde boş bir blok da C dilinde bir deyim gibi ele alınır. Bu yazım tamamen noktalı virgülün (sonlandırıcının) yalnız kullanılmasına eşdeğerdir. Dolayısıyla aşağıdaki kod parçası da hatalıdır: { int x; { } int y; /* ERROR ! y değişkeninin bildirimi doğru yerde değil. */ } Bir ya da birden fazla deyimin de blok içine alınması C dilinde bileşik deyim (compound statement) ismini alır ve bileşik deyimler de icra edilebilir deyim kategorisine girerler. Dolayısıyla aşağıdaki kod parçası da hatalıdır. { {int x;} int y; /* ERROR */ } (C++ dilinde blok içinde bildirimi yapılan değişkenlerin, blokların ilk işlemleri olacak şekilde bildirilmeleri zorunlu değildir. Yani C++ da değişkenler blokların içinde herhangi bir yerde bildirilebilirler.) NOT: ALINTIDIR Okan ATABAĞ okanatabag@gmail.com Yorumlar ![]() Hiç yorum yapılmamış |
Oturum Açmadınız
C++ ![]()
Üyelik ![]() » Üye Değilim » Aktivasyon » Şifremi Unuttum » Üye Girişi Menü ![]() Arama ![]() |
|||||||||||||||||||||||||||||||
![]() |
![]() |
![]() |
||||||||||||||||||||||||||||||