C Programlama Dili Depolama Sınıf Belirteçleri (auto, extern, static, register)
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 |
Leave a reply
Lütfen yorum için giriş yap ve yakayıt ol Teşekkürler .