Tip Niteleyiciler; CCS C dilinde değişkenlerin geçerlilik alanını, ömrünü ve hangi bellekte ne şekilde tutulması gerektiğini derleyiciye bildirmek için kullanılan belirteçlerdir.
CCS C dilinde kullanılan belirteçler ve açıklamaları;
auto belirteci bir değişkenin yalnızca tanımlandığı alan içerisinde geçerli olduğunu, bu alan dışına çıkıldığında bellekten silineceğini belirtmek için kullanılır. Eğer bir değişkenin başında herhangi bir yer belirleyici kullanılmamışsa, o değişken otomatik olarak auto belirteci olarak algılanır.
static olarak tanımlanan değişken yalnızca tanımlandığı alan içinde geçerli olmasına karşın, alanın dışına çıkıldığında hafızadan silinmez ve ömrüne devam eder. Eğer tekrar tanımlandığı alan içine girilecek olursa, değişken son atandığı değeri koruduğu görülür.
Örneğin iki adet toplama fonksiyonumuz olsun, bu foksiyonları her çağırdığımızda bizim gönderdiğimiz değer ile kendi içerisindeki “localDegisken” adındaki değişkenin değerini toplayıp bize geri döndürsün. Ancak fonksiyonlar içerisindeki localDegisken adlı değişkenimizin birini static olarak tanımlayalım ve farkı görelim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
int toplama(int gelen){ static int localDegisken = 0; localDegisken = gelen + localDegisken; return localDegisken; } int toplama2(int gelen){ int localDegisken = 0; localDegisken = gelen + localDegisken; return localDegisken; } void main() { while(TRUE) { toplama(3); // Sonuç 3'er 3'er artar toplama2(3); // Sonuç 3 olarak kalır delay_ms(1000); // 1 saniye bekle } } |
Yukarıdaki kodu çalıştırdığımızda, toplama() fonksiyonu içerisindeki localDegisken değerimiz static olarak tanımlandığı için fonksiyon çalışıp sonlandığında hafızadaki değeri tutacaktır.
toplama2() fonksiyonumuzda ise “localDegisken” auto olarak tanımlandığı için foksiyon sonlandığında değişkenimiz bir sonraki çağırma işlemine kadar hafızadan silinecektir.
Bu belirteç kapsam dışı derleme işlemlerinde değişkenleri erişilebilir kılmak için kullanılır. Örneğin birden fazla derlenecek dosya mevcut ise, derleyiciye bir değişkenin başka bir dosyada mevcut olduğunu bildirmek için kullanılır. Aksi taktirde, derleyici derleme hatası verebilir.
Örneğin 2 adet dosyamız olsun. Birinci dosyamızın ismi AnaProgram.c, ikinci dosyamızın ismi ekProgram.c olsun. AnaProgram.c dosyamızda ekProgram.c dosyamızdaki sayi değişkenini kullanalim;
main.c dosyamız:
1 2 3 |
#include <16F877a.h> #include <anaProgram.c> #include <ekProgram.c> |
anaProgram.c dosyamız:
1 2 3 4 5 6 7 8 9 |
void main() { lcd_init(); extern int8 sayi; // Burada "sayi" değişkeninin başka bir dosyada olduğunu belirttik for(int i=0; i<sayi; i++){ printf(lcd_putc, "\fDongu Sayisi: %d", i); delay_ms(100); } } |
ekProgram.c dosyamız:
1 2 3 4 5 6 |
int8 sayi = 90; void func(){ for(int i = 0; i < sayi; i++){ //... } } |
Yukarıda görüldüğü üzere 3 adet dosyamız mevcut. Birincisi derlemenin yapılacağı main.c dosyamız, ikincisi anaProgram.c ve üçüncüsü ekProgram.c dosyamız. Biz ekProgram.c dosyasında tanımladığımız ve 90 olarak değer atadığımız “sayi” değişkenini anaProgram.c dosyamızda kullandık. Eğer anaProgram.c dosyamızda kullandığımız “sayi” değişkeninin başka bir dosyada tanımlandığını “extern” komutu ile derleyiciye bildirmeseydik, programımız derleme sırasında hata verecekti.
Daha önce Değişkenler yazımızda ele aldığımız bu belirteçler, değişkenlerin işaretli ya da işaretsiz sayıları tuttuğunu belirtmek için kullanıldığını açıklamıştır. Eğer sayı türünde bir değişken tanımlarken öncesinde bir şey belirtilmemişse o değişken otomatik olarak signed (işaretli) olarak derlenir. Eğer değişkeni tanımlarken başına unsigned eklenirse, değişken yalnızca işaretsiz sayıları tutacaktır.
Örnek;
1 2 3 4 |
int8 sayi1; // Bu değişken -127 ile +128 aralığındaki sayıları tutabilir signed int8 sayi2; // Bu değişken -127 ile +128 aralığındaki sayıları tutabilir unsigned int8 sayi3; Bu değişken 0 ile +255 aralığındaki sayıları tutabilir |
const belirteci programın çalışması boyunca asla değiştirilmeyecek değerleri tutan değişkenler için kullanılır. Proogramcılıkta bu tür değişkenlere “Sabitler” denir. Sabitler programda tanımlandığı noktada değer atanır ve bu değer asla değiştirilemez.
Örnek:
1 2 3 |
const float piSayisi = 3.14; // piSayisi adında float türü sabit tanımladık ve // 3.14 değerini atadık // bu sabitin değeri program boyunca değişmeyecek |
volatile belirteci bir değişkenin değerinin belli bir noktada değiştirileceğini derleyiciye bildirmek için kullanılır.