C'deki Depolama Sınıfları: Otomatik, Harici, Statik, Kayıt (Örnekler)
⚡ Akıllı Özet
C dilindeki depolama sınıfları, her değişkenin kapsamını, ömrünü, varsayılan değerini ve bellek konumunu tanımlar; bu tanımlamalar için auto, register, static ve extern olmak üzere dört belirleyici kullanılır ve bu belirleyiciler verilerin nerede yaşayacağını ve yürütme sırasında ne kadar süreyle varlığını sürdüreceğini kontrol eder.

C'de Depolama Sınıfı Nedir?
Bir depolama sınıfı, bir değişkenin görünürlüğünü ve konumunu temsil eder. Bir değişkene kodun hangi kısmından erişebileceğimizi söyler. C'de bir depolama sınıfı, aşağıdaki şeyleri tanımlamak için kullanılır:
- Değişken kapsamı.
- Değişkenin depolanacağı konum.
- Bir değişkenin başlatılmış değeri.
- Bir değişkenin ömrü.
- Bir değişkene kimler erişebilir?
Bu nedenle bir değişken hakkındaki bilgileri temsil etmek için bir depolama sınıfı kullanılır.
NOT: Bir değişken yalnızca bir ile ilişkilendirilmez. veri tipi, değeri ama aynı zamanda bir depolama sınıfı.
C'deki Depolama Sınıfı Türleri Nelerdir?
Toplam dört tür standart depolama sınıfı vardır. Aşağıdaki tablo C'deki depolama sınıflarını göstermektedir.
| Depolama sınıfı | Amaç |
| Oto | Varsayılan bir depolama sınıfıdır. |
| stajyer doktor | Global bir değişkendir. |
| statik | Kontrol fonksiyon çağrısına aktarıldığında bile değer döndürebilen yerel bir değişkendir. |
| kayıt olmak | Bir Register'ın içinde saklanan bir değişkendir. |
C'de Otomatik Depolama Sınıfı
Otomatik depolama sınıfı kullanılarak tanımlanan değişkenlere yerel değişkenler adı verilir. Otomatik, otomatik depolama sınıfı anlamına gelir. Bir değişken, açıkça belirtilmediği takdirde varsayılan olarak otomatik depolama sınıfındadır.
Bir otomatik değişkenin kapsamı yalnızca belirli blokla sınırlıdır. Kontrol bloğun dışına çıktığında erişim yok edilir. Bu, yalnızca otomatik değişkenin bildirildiği bloğun ona erişebileceği anlamına gelir.
Bir otomatik depolama sınıfını tanımlamak için auto anahtar sözcüğü kullanılır. Varsayılan olarak, bir otomatik değişken bir çöp değeri içerir.
Example, auto int age;
Aşağıdaki program iki yerel değişkene sahip bir fonksiyonu tanımlar.
int add(void) { int a=13; auto int b=48; return a+b;}
Birbirinden bağımsız olan her blok kodundaki otomatik değişkenler için kapsam seviyesi “görünürlük seviyesini” gösteren başka bir program alıyoruz:
#include <stdio.h> int main( ) { auto int j = 1; { auto int j= 2; { auto int j = 3; printf ( " %d ", j); } printf ( "\t %d ",j); } printf( "%d\n", j);}
Çıktı:
3 2 1
C'de Harici Depolama Sınıfı
Extern, harici depolama sınıfı anlamına gelir. Extern depolama sınıfı, iki veya daha fazla dosya arasında paylaşılan global işlevlere veya değişkenlere sahip olduğumuzda kullanılır.
`extern` anahtar kelimesi, başka bir dosyada global bir değişken veya fonksiyon bildirmek için kullanılır; bu sayede orijinal dosyada önceden tanımlanmış olan değişken veya fonksiyona referans sağlanır.
Bir extern anahtar sözcüğü kullanılarak tanımlanan değişkenlere global değişkenler adı verilir. Bu değişkenlere program boyunca erişilebilir. Harici değişkenin başlatılamayacağına, orijinal dosyada zaten tanımlandığına dikkat edin.
Example, extern void display();
İlk Dosya: main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
İkinci Dosya: orijinal.c
#include <stdio.h>
i=48;
Sonuç:
value of the external integer is = 48
Yukarıdaki kodu derlemek ve çalıştırmak için aşağıdaki adımları izleyin.
Adım 1) Yeni bir proje oluşturun,
- Konsol Uygulamasını Seçin
- Git'i tıklayın
Adım 2) C'yi seçin ve İleri'ye tıklayın.
Adım 3) İleri'ye tıklayın
Adım 4) Bilgileri girin ve İleri'ye tıklayın.
Adım 5) Bitir'e tıklayın.
Adım 6) Önceki programda gösterildiği gibi ana kodu main.c dosyasına yazın ve kaydedin.
Adım 7) Yeni bir C dosyası oluşturun [Dosya -> Yeni -> Boş Dosya], kaydedin (orijinal.c olarak) ve iletişim kutusundaki "Tamam" düğmesine tıklayarak mevcut projeye ekleyin.
Adım 8) Önceki örnekte gösterilen original.c dosyasındaki C kodunu, main() fonksiyonu hariç, olduğu gibi kopyalayıp kaydedin.
Adım 9) Projenizi derleyin ve çalıştırın. Sonuç aşağıdaki şekilde gösterilmiştir.
C'de Statik Depolama Sınıfı
Statik değişkenler, işlev/dosya içinde yerel statik değişkenler olarak kullanılır. Ayrıca bir araç olarak da kullanılabilirler. küresel değişken
- Statik yerel değişken, değerini işlev çağrıları veya blok arasında tutan ve saklayan ve yalnızca tanımlandığı işlev veya blok tarafından görülebilen yerel bir değişkendir.
- Statik global değişkenler, yalnızca tanımlandıkları dosyada görülebilen global değişkenlerdir.
Example: static int count = 10;
Statik değişkenin varsayılan başlangıç değerinin sıfır olduğunu ve ömrü boyunca yalnızca bir kez başlatıldığını unutmayın.
#include <stdio.h> /* function declaration */ void next(void); static int counter = 7; /* global variable */ main() { while(counter<10) { next(); counter++; } return 0;} void next( void ) { /* function definition */ static int iteration = 13; /* local static variable */ iteration ++; printf("iteration=%d and counter= %d\n", iteration, counter);}
Sonuç:
iteration=14 and counter= 7 iteration=15 and counter= 8 iteration=16 and counter= 9
Global değişkenlere dosyanın her yerinden erişilebilirken, statik değişkenlere yalnızca kodun belirli bir kısmı için erişilebilir.
Statik bir değişkenin ömrü program kodunun tamamındadır. Statik anahtar kelime kullanılarak bildirilen veya başlatılan bir değişken, her zaman varsayılan değer olarak sıfır içerir.
Depolama Sınıfını C'ye Kaydetme
Yerel değişkenleri, CPU yazmaçlarındaki işlevler veya bloklar içinde saklamak istediğinizde, yazmaç depolama sınıfını kullanabilirsiniz. RAM Bu değişkenlere hızlı erişim sağlamak için. Örneğin, "sayaçlar" kayıt defterinde saklanmak için iyi bir adaydır.
Example: register int age;
`register` anahtar kelimesi, bir kayıt depolama sınıfı tanımlamak için kullanılır. Kayıt depolama sınıfı kullanılarak tanımlanan değişkenler, program boyunca bir ömre sahiptir.
Otomatik depolama sınıfına benzer. Değişken belirli blokla sınırlıdır. Tek fark, yazmaç depolama sınıfı kullanılarak bildirilen değişkenlerin bellek yerine CPU yazmaçlarının içinde saklanmasıdır. Kayıt ana hafızaya göre daha hızlı erişime sahiptir.
Kayıt depolama sınıfı kullanılarak bildirilen değişkenlerin varsayılan değeri yoktur. Bu değişkenler genellikle programın başında bildirilir.
#include <stdio.h> /* function declaration */ main() { {register int weight; int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/} }
Çıktı:
error: address of register variable 'weight' requested
Sonraki tablo, C programlamada yaygın olarak kullanılan her bir depolama sınıfının temel özelliklerini özetlemektedir.
| Depolama sınıfı | Beyan | Depolama | Varsayılan Başlangıç Değeri | kapsam | Ömür |
| Oto | Bir fonksiyonun/bloğun içinde | Bellek | Öngörülemeyen | Fonksiyon/blok içinde | Fonksiyon/blok içinde |
| kayıt olmak | Bir fonksiyonun/bloğun içinde | CPU Kayıtları | Çöp | Fonksiyon/blok içinde | Fonksiyon/blok içinde |
| stajyer doktor | Tüm fonksiyonların dışında | Bellek | Sıfır | Değişkenin extern olarak bildirildiği dosyanın tamamı ve diğer dosyalar | programın çalışma zamanı |
| Statik (yerel) | Bir fonksiyonun/bloğun içinde | Bellek | Sıfır | Fonksiyon/blok içinde | programın çalışma zamanı |
| Statik (küresel) | Tüm fonksiyonların dışında | Bellek | Sıfır | Küresel | programın çalışma zamanı |








