C Programlama dilinde depolama sınıf belirteçleri bir değişkeni saklama için derleyiciye bilgi verir, değişkeni nasıl saklayacağını derleyiciye belirtir ve değişkenin yaşam döngüsünü belirler.
Syntax (Söz Dizimi):
depolama_belirteci veriTipleri degisken;
C Programlama Dilinde Depolama Sınıf Belirteç Türleri:
C Dilinde 4 farklı depolama sınıf belirteci vardır. Bunlar,
Depolama Belirteçleri | Açıklama |
---|---|
auto | Depolama yeri: Memory (Bellek)
İlk/varsayılan değer: Garbage (anlamsız veri) değer |
extern | Depolama yeri: Memory (Bellek)
İlk/varsayılan değer: Sıfır ‘0’ Kapsam: Global Yaşam döngüsü: Ana program sonuna kadar. Değişken tanımı her yerde olabilir. |
static | Depolama yeri: Memory (Bellek)
İlk/varsayılan değer: Sıfır ‘0’ Kapsam: Yerel Yaşam döngüsü: Farklı fonksiyonlarında bile değişkenin değerini korur. |
register | Depolama yeri: Register (yazmaç) belleği
İlk/varsayılan değer: Garbage (anlamsız veri) değer Kapsam: Yerel Yaşam döngüsü: Sadece bulunduğu fonksiyonun içinde. |
NOT:
- Bir değişkene hızlı erişim için auto belirteçi yerine register belirteci kullanmak daha iyidir.
- Çünkü, register değişkenleri, register bellekte (CPU belleği) depolanırken auto değişkenleri bellekte depolanır.
- Sınırlı sayıda değişkenler register bellekte depolanabilir. Yani çok sık kullanılan kayıtlar için register belirteç kullanabilirsiniz. Bu sayede yazdığınız programlar daha hızlı olacaktır.
C Programlama Dilinde auto Değişkenlerin Kullanımı
Bir auto değişkeninin kapsamı sadece işlev içinde bulunan fonksiyonu kapsar. Yerel değişkene eşdeğerdir. Tüm yerel değişkenler varsayılan olarak auto değişkenidir.
Örnek 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include<stdio.h>
void birDegerArtir();
int main() {
birDegerArtir();
birDegerArtir();
birDegerArtir();
birDegerArtir();
return 0;
}
void birDegerArtir() {
auto int i = 0;
printf("%d ", i);
i++;
}
|
Çıktı:
1 |
0 0 0 0
|
Örnek 1’de i değişkeni birDegerArtir() fonksiyonu içerisinde auto belirteci ile tanımlanmıştır. ‘i’ değişkeni yerel bir değişkendir ve main() fonksiyonu içerisinde ulaşılamaz.
C Programlama Dili static Değişken Kullanımı
static değişkenler farklı fonksiyon kullanımlarında değişken değerini korur ve değişmez.
Örnek 2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include<stdio.h>
void birDegerArtir();
int main() {
birDegerArtir();
birDegerArtir();
birDegerArtir();
birDegerArtir();
return 0;
}
void birDegerArtir() {
static int i = 0;
printf("%d ", i);
i++;
}
|
Çıktı:
1 |
0 1 2 3
|
Örnek 2’de birDegerArtir() fonksiyonu 4 kere main() fonksiyonu tarafından çağrılmıştır ve ekrana i değişkeninin değeri 4 kere yazdırılmıştır. Bir belirteç kullanılmadığında ya da auto olarak belirtildiğinde her seferinde ‘i’ değeri 0 olacağından ekrana hep 0 yazmaktaydı. Bu örnekte ise ‘i’ değişkeni static olarak tanımlanmıştır ve bu sayede değeri korunmuştur.
C Programlama Dili extern Değişken Kullanımı
extern değişkeninin kapsamı ana program boyuncadır. extern belirteci global değişkene eşdeğerdir. extern değişkeni için C programının her yerinde extern tanımı yapılabilir.
Örnek 3:
1
2
3
4
5
6
7
8
9
10
11
|
#include <stdio.h>
int x = 10;
int main() {
extern int y; //extern olarak tanımlanmazsa deger varsayılan 0 olarak ekrana yazdirilir
printf("Global x degiskeninin degeri: %d \n", x);
printf("extern y degiskeninin degeri: %d", y);
return 0;
}
int y = 50;
|
Çıktı:
1
2
|
Global x degiskeninin degeri: 10
extern y degiskeninin degeri: 50
|
C Programlama Dili register Değişken Kullanımı
- register değişkenleri lokal değişkenlerdir. Farklı olarak register belleğinde (CPU belleğinde) depolanırlar.
- register değişkenleri, register belleğinde depolanacağı için normal değişkenlerden çok daha hızlı erişilir.
- register değişkenleri için depolama alanı düşük olduğu için sadece sınırlı değişken kayıtları için kullanılabilir (16bit, 32bit veya 64 bit olabilir). Sıkça kullanılan değişkenler için önerilir (döngü sayaçları vs.).
Örnek 4:
1
2
3
4
5
6
7
8
9
10
|
#include <stdio.h>
int main() {
register int i;
int sayilar[6] = {11, 22, 33, 44, 55, 66};
for (i = 0; i < 6; i++) {
printf("sayilar[%d] degeri: %d \n", i, sayilar[i]);
}
return 0;
}
|
Çıktı:
1
2
3
4
5
6
|
sayilar[0] degeri: 11
sayilar[1] degeri: 22
sayilar[2] degeri: 33
sayilar[3] degeri: 44
sayilar[4] degeri: 55
sayilar[5] degeri: 66
|