Değişken Depolama Sınıfları
Değişken Depolama Sınıfları
Bir programdaki her tanıtıcı depolama sınıfı,depolama süreci,faaliyet alanı ve bağlama özelliklerine de sahiptir. C programlama;auto,register,extern ve static depolama sınıfı belirteçleriyle belirlenebilen dört depolama sınıfına sahiptir.
Bir tanıtıcının depolama sınıfı, depolama süreci, faaliyet alanı ve bağlama özelliklerinin belirlenmesine yardımcı olur. Bir tanıtıcının depolama süreci o tanıtıcının hafızada tutulduğu zaman aralığıdır.
Bir tanıtıcının faaliyet alanı tanıtıcının program içinde kullanılabileceği yerdir. Bazı tanıtıcılar, tüm program boyunca, diğerleri ise programın bazı kısımlarında kullanılabilirler.
Auto
Otomatik depolama süreci . auto değişken bildirmek için kullanılırlar. Otomatik depolama süreçli değişkenler, bildirildikleri blok içine girildiğinde yaratılır, blok aktif iken varolur ve bloktan çıkıldığında yok edilirler.
auto anahtar kelimesi, otomatik depolama süreçli değişkenler bildirmek için kullanılır.
auto double x, y;
double tipteki x ve y değişkenlerinin otomatik yerel değişkenler olduğunu ve yalnızca bildirimin yer aldığı fonksiyon gövdesi içinde varolduğunu belirtir.
- Otomatik depolama hafızayı korumak için kullanılır. Bildirildikleri fonksiyon çalıştırıldığında yaratılır, fonksiyonun çalıştırılması sona erdiğinde yok edilirler.
Register
register anahtar kelimesi yalnızca otomatik depolama süreçli değişkenlerle kullanılabilir. register depolama sınıfı belirteci, otomatik değişken bildiriminden önceye yerleştirilerek derleyiciye, değişkeni, bilgisayarın yüksek hızlı donanım yazmaçlarından birine yerleştirmesi önerilebilir.
register int sayici = 1;
sayici değişkeninin tamsayı olduğunu ve bilgisayarın yazmaçlarından birine yerleştirileceğini ve ayrıca ilk değer olarak 1 değerine atanacağını belirtmektedir.
- Genellikle register bildirimleri gereksizdir. Bugünkü derleyicilerin bir çoğu sıklıkla kullanılan değişkenleri tanıyıp, programcının register bildirimi yapmasına gerek kalmadan değişkeni yazmaçlardan birinin içine koymaya karar verir.
Extern
Statik depolama zamanlı iki tip tanıtıcı vardır: dış tanıtıcılar (global değişkenler ve fonksiyon isimleri gibi) ve static depolama zamanı belirteciyle bildirilmiş yerel değişkenler. Global değişkenler ve fonksiyon isimleri, aksi belirtilmedikçe extern depolama sınıfındadırlar.
Static
static anahtar kelimesiyle bildirilen yerel değişkenler yalnızca bildirildikleri fonksiyon içinde bilinmektedirler ancak otomatik değişkenlerden farklı olarak, static yerel değişkenler fonksiyondan çıkıldıktan sonrada değerlerini korurlar. Fonksiyonun bir sonraki çağrısında, static yerel değişken, fonksiyondan en son çıkıldığındaki değeri tutmaktadır.
static int say = 1;
say yerel değişkenini static olarak bildirmekte ve değişkene ilk değer olarak 1 vermektedir.
- Statik depolama zamanlı tüm nümerik değişkenler, programcı tarafından özel olarak bir başka değere atanmadıkça ilk değer olarak 0’a atanırlar.
Değişken Alanları
#include<stdio.h> void a1 (void); void b1(void); void c1(void); int x=1; // Genel (Global Değiken) int main () { int x=5; // main içindeki değişken printf("main icindeki x degiskeni %d olur \n ",x); { // Yeni faliyet alanı int x=7; printf("\nYeni faliyet alni icindeki x degiskeni %d olur.\n",x); } a1(); b1(); c1(); a1(); b1(); c1(); printf("\nEn son mainin icindeki x degiskeni %d olur\n",x); return 0; } void a1( void) { int x=25; // a her çağırıldığında bu değeri alır printf("\na1'in icinden gelen x %d olur.\n",x); ++x; printf("a1'in icinden cikmadan once x %d olur.\n",x); } void b1(void) { static int x=50; // stactic deger atama printf("\nb1 den gelen static x=%d olur.\n",x); ++x; printf("b1'in icinden cikmadan once x %d olur.\n",x); } void c1(void) { printf("\nc den gelen global x= %d olur.\n",x); ++x; printf("c1'in icinden cikmadan once x %d olur.\n",x); }
- Global ve yerel değişkenlerin gösterildiği bu örnekte main’in blokları({}) arasında x değişkeni her zaman tanımlandığı 5 değerini alır.
- main‘in içi kısmında tanımlanan blokta 7 değerini almıştır.
- a1 fonksiyonu içerisine her girildiğinde x değişkeni 25 değerini alacaktır. Çıkarken değeri arttırılsa bile tekrar girildiğinde eski değerini korumayacak 25 değerini alacaktır.
- b1 fonksiyonu içerisinde static x değişkeni bildirilmekte bu şekilde bildirilen yerel değişkenler faliyet alanı dışında olsalar bile değerlerini korurlar.
- c1 fonksiyonu içerisinde bir değişken bildirilmemiştir. Değişken bildirilmeyen bloklarda veya fonksiyonlarda global değişken değerini alır.
- En son main programı sonlanırken main blokları arsında olan x değerini alır.